你可以跟踪一下,从DoModal()到CreateDlgIndirect()到RunModalLoop()窗口就显示出来了. 在RunModalLoop()中有: // show the window when certain special messages rec'd if (bShowIdle && (pMsg->message == 0x118 || pMsg->message == WM_SYSKEYDOWN)) { ShowWindow(SW_SHOWNORMAL); UpdateWindow(); bShowIdle = FALSE; }
dlg.DoModal
dlg.Create
之类的
dlg.Create()是不自动显示窗口的,需要ShowWindow().
不知道你要干什么?
如果是dlg.DoModal 产生的模态框,他是自动的显示出你的对话框,这个好像没有办法隐藏
如果是用dlg.create 产生的非模态框,你可以先ShowWindow(SW_HIDE);然后再ShowWindow(SW_SHOW);就可以实现了先隐藏再显示的功能
mfc是在那里把窗口显示出来的
在RunModalLoop()中有:
// show the window when certain special messages rec'd
if (bShowIdle && (pMsg->message == 0x118 || pMsg->message == WM_SYSKEYDOWN))
{
ShowWindow(SW_SHOWNORMAL);
UpdateWindow();
bShowIdle = FALSE;
}
void CTest6Dlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
if( GetStyle() & WS_VISIBLE ) {
CDialog::OnShowWindow(bShow, nStatus);
} else {
long Style = ::GetWindowLong(*this, GWL_STYLE);
::SetWindowLong(*this, GWL_STYLE, Style | WS_VISIBLE);
CDialog::OnShowWindow(SW_HIDE, nStatus);
}
}