Hiding an MFC dialog box

后端 未结 3 1454
再見小時候
再見小時候 2021-02-06 12:50

Ok so I am using this code to hide the taskbar icon of a dialog based MFC application(VC++). The taskbar icon and the dialog box hide whenever I click on the cross or the close

相关标签:
3条回答
  • 2021-02-06 13:25

    If you show your dialog using CDialog::DoModal() the framework will make sure your dialog is shown. There is only one way to prevent a modal dialog from being shown:

    BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
        ON_WM_WINDOWPOSCHANGING()
    END_MESSAGE_MAP()
    
    BOOL CHiddenDialog::OnInitDialog()
    {
        CDialog::OnInitDialog();
        m_visible = FALSE;
    
        return TRUE;
    }
    
    void CHiddenDialog::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos) 
    {
        if (!m_visible)
            lpwndpos->flags &= ~SWP_SHOWWINDOW;
    
        CDialog::OnWindowPosChanging(lpwndpos);
    }
    
    0 讨论(0)
  • 2021-02-06 13:25

    I think Paul DiLascia recommended the following. This is for modal dialogs only.

    The following code can be put in OnInitDialog to move the dialog off-screen. You will need to implement a method for moving it back on-screen when appropriate.

    CRect DialogRect;
    GetWindowRect(&DialogRect);
    int DialogWidth = DialogRect.Width();
    int DialogHeight = DialogRect.Height();
    MoveWindow(0-DialogWidth, 0-DialogHeight, DialogWidth, DialogHeight);
    

    The answer from l33t looks good and is probably better but this is an alternative.

    0 讨论(0)
  • 2021-02-06 13:26

    Maybe an obvious thing, but what happens when you do the hide before you reparent the dialog? Also what if you don't directly modify the window style but use ShowWindow(SW_HIDE)?

    Finally, have you tried switching the dialog's window style to WS_CHILD before calling SetParent() and/or maybe moving it out of the client area so that the window isn't shown any more (MoveWindow(-1000, -1000) or something like that).

    0 讨论(0)
提交回复
热议问题