모달 대화상자를 숨겨진 채로 시작하기
Starting a modal dialog hidden
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 call
ShowWindow(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);
From : http://www.voidnish.com/Articles/ShowArticle.aspx?code=dlgboxtricks