MFC基于对话框程序启动时隐藏窗口的实现

原创 2017年09月30日 06:13:08

对于基于对话框的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
);
参数lpwndposWINDOWPOS结构的指针,该结构包含了窗口大小和位置的信息。其中有一个成员变量flags表示窗口位置的属性,该成员变量的值SWP_SHOWWINDOW表示显示窗口,我们只需将变量中的该值去掉即可。

为窗口添加WM_WINDOWPOSCHANGING消息的响应OnWindowPosChanging(),在该函数中添加如下代码

lpwndpos->flags &= ~SWP_SHOWWINDOW;
以上代码的功能即为将flagsSWP_SHOWWINDOW属性去掉。

MFC基于Dialog的窗口程序启动时最小化到托盘

一、托盘是什么 所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。 二、...

MFC基于Dialog的窗口程序启动时最小化到托盘

一、托盘是什么 所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。 二、...

MFC基于Dialog的窗口程序启动时最小化到托盘

一、托盘是什么 所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。 二、...
  • zhoxier
  • zhoxier
  • 2012年08月27日 14:52
  • 769

MFC基于Dialog的窗口程序启动时最小化到托盘

MFC基于Dialog的窗口程序启动时最小化到托盘 一、托盘是什么 所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。在程序最小化或挂起时,但有...

VC基于对话框,文档程序启动时隐藏窗口总结

想让对话框程序隐藏启动,然后需要时又可以显示。 刚开始我也想到在OnInitDialog()中加上ShowWindow(SW_HIDE),其实这样是不行的,不信自己去试验 找了网上的方法,都没有满...

windows应用开发由浅入深(三)利用注册表将程序启动时窗口位置设置为上次关闭的位置

相关结构:WINDOWPLACEMENT 原型:typedef struct tagWINDOWPLACEMENT {     UINT  length;     UINT  flags;  ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC基于对话框程序启动时隐藏窗口的实现
举报原因:
原因补充:

(最多只允许输入30个字)