Re: Hide a DoModal
during call to my dlg.DoModal() before the dialog is shown for the first
time I'd like to hide it.
I have tried a ShowWindow(SW_HIDE) in the OnInitDialog but that did not
work.
Michael,
If you want the dialog to appear initially hidden here's a couple of
possibilities I've seen posted before:
Method 1
--------
Add a "visible" flag to the dialog class and initialize it to
FALSE in the constructor.
Add a handler for OnWindowPosChanging.
void CTestDlg::OnWindowPosChanging( WINDOWPOS* lpwndpos )
{
if ( !m_bVisible )
lpwndpos->flags &= ~SWP_SHOWWINDOW ;
CDialog::OnWindowPosChanging(lpwndpos);
}
Add a function to show/hide the app.
void CTestDlg::DisplayWindow( BOOL bShow )
{
if ( bShow )
{
m_bVisible = TRUE;
ShowWindow( SW_SHOWNORMAL );
}
else
{
m_bVisible = FALSE;
ShowWindow( SW_HIDE );
}
}
Method 2
--------
Post a user defined message in OnInitDialog, and position the dialog
off-screen. In the processing of the user defined message hide the
window, and when you want to display it you can reposition
it and show it. Here's the general idea:
BEGIN_MESSAGE_MAP(CMindlgDlg, CDialog)
//{{AFX_MSG_MAP(CMindlgDlg)
...
//}}AFX_MSG_MAP
ON_MESSAGE( WM_APP+1, OnAppMsg )
END_MESSAGE_MAP()
BOOL CMindlgDlg::OnInitDialog()
{
...
// TODO: Add extra initialization here
SetWindowPos( NULL, -1000, -1000, 0, 0,
SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE );
PostMessage( WM_APP+1 );
return TRUE;
}
LRESULT CMindlgDlg::OnAppMsg(WPARAM, LPARAM)
{
ShowWindow( SW_HIDE );
return 0;
}
Dave