对于基于对话框的MFC程序,如果想要程序启动时就隐藏主窗口,无法在该对话框类的OnInitialDialog()函数中实现隐藏窗口的功能。但是,可以通过对话框程序响应WM_WINDOWPOSCHANGING消息来实现隐藏窗口的功能。
1 OnInitialDialog()函数
OnInitialDialog()函数是CDialog类的成员函数,该函数用来响应WM_INITDIALOG消息的。当调用CDialog类的Create()、CreateIndirect()和DoModal()函数时,都会向对话框发送WM_INITDIALOG消息,对话框收到该消息后调用OnInitialDialog()函数。
在OnInitialDialog()函数中主要完成一些特殊的处理,这些处理将会在对话框初始化时起作用。例如,设置对话框的风格、标题等。需要注意的是,OnInitialDialog()函数是在显示对话框之前被调用的,因此,即使在该函数中使用了
ShowWindow(SW_HIDE);
代码来隐藏对话框,在该函数调用之后,显示对话框的函数还会被调用,所以对话框仍然会显示。
2 OnWindowPosChanging()函数
可以在WM_WINDOWPOSCHANGING消息的响应函数OnWindowPosChanging()中将对话框的显示属性去掉,达到隐藏对话框的目的。
当对话框的大小、位置或者排列层次即将发生变化时,系统会向该对话框发送WM_WINDOWPOSCHANGING消息,该消息的响应函数为OnWindowPosChanging(),该函数的格式为
afx_msg void OnWindowPosChanging(
WINDOWPOS* lpwndpos
);
参数lpwndpos
是
WINDOWPOS
结构的指针,该结构包含了窗口大小和位置的信息。其中有一个成员变量
flags
表示窗口位置的属性,该成员变量的值
SWP_SHOWWINDOW
表示显示窗口,我们只需将变量中的该值去掉即可。
为窗口添加WM_WINDOWPOSCHANGING消息的响应OnWindowPosChanging(),在该函数中添加如下代码
lpwndpos->flags &= ~SWP_SHOWWINDOW;
以上代码的功能即为将flags
中
SWP_SHOWWINDOW
属性去掉。