转自http://www.codeproject.com/Articles/1724/Some-handy-dialog-box-tricks-tips-and-workarounds
You often hear people complain that despite putting a ShowWindow(SW_HIDE)
in their OnInitDialog
their modal dialog still starts up in a shown state. The problem here is that when CDialog::OnInitDialog()
finishes it will callShowWindow(SW_SHOW)
. Thus your dialog box is again made visisble. But then as, is to be expected, people have worked around this. Here is what you need to do.
Add a BOOL
member to your dialog class and call it something, say visible
.
Now in your dialog constructor set visible
to false
.
visible = false;
Now you need to override WM_WINDOWPOSCHANGING
. You might have to change your message filtering options to have this message show up in the Class Wizard.
void CTest_deleteDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos) { if(!visible) lpwndpos->flags &= ~SWP_SHOWWINDOW; CDialog::OnWindowPosChanging(lpwndpos); }
That's it. Now your modal dialog actually starts up in a hidden state. And when you want to make it visible this is what you need to do.
visible = true;
ShowWindow(SW_SHOW);