现在的位置: 首页 > 综合 > 正文

MFC初始化时隐藏对话框(无闪烁)

2013年04月05日 ⁄ 综合 ⁄ 共 1090字 ⁄ 字号 评论关闭

MFC初始化时隐藏对话框

--《VC编程知识总结》之二

前面我讲了如何将MFC最小化到系统托盘,这次讲一下怎么能在最小化到系统托盘之前,将对话框隐藏。关于隐藏对话框,我参考了http://www.qqgb.com/Program/VC/VCJM/Program_55005.html上的不绘制窗口方法,具体方法如下:

第一步,声明一个响应函数afx_msg void OnNcPaint();用于阻止绘制对话框操作。将这个函数放入Dlg类的声明中,作为Dlg类的一个成员。

第二步,注册消息WM_NCPAINT(),也就是在BEGIN_MESSAGE_MAP(Dlg,CDialog)和END_MESSAGE_MAP()之间添加ON_WM_NCPAINT()。

第三步,OnNcPaint函数代码如下:
void CMyDialog::OnNcPaint()
{
static int i = 2;
if(i > 0)
{

i --;
ShowWindow(SW_HIDE);
}
else
CDialog::OnNcPaint();
}
OnNcPaint函数解释:程序的需求是只要窗口在初始运行时隐藏,所以定义static int i = 2;
变量可以判断是否是首次显示窗口。之所以定义为2,是因为当程序开始运行时,系统发送(SendMessage)ON_WM_NCPAINT消息,此时程序的窗口边框应该被显示,但是此时我们没有作任何显示的操作,而是将窗口隐藏,ShowWindow(SW_HIDE)将把窗口的WS_VISIBLE属性去掉,继续执行,程序将检查WS_VISIBLE属性,如果没有则显示窗口,所以又发送了一个ON_WM_NCPAINT消息。所以我们要处理两次ON_WM_NCPAINT消息。其次,也可以定义static int i = 1;如果将i定义为1,则必须把窗口的Visible属性去掉,也就是在窗口上右键点击属性,选择More
Styles,将Visible前面的勾去掉。

有了以上三步就可以实现对话框隐藏,但在程序启动的时候,系统状态栏里会有程序的图标闪一下,这就需要再做一些工作:

第一,在OnInitDialog()函数中添加ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);使对话框不在系统任务栏中显示。

第二,在需要对话框显示的程序中添加ModifyStyleEx(WS_EX_TOOLWINDOW, WS_EX_APPWINDOW);使对话框显示在系统任务栏中。

转载自:http://blog.sina.com.cn/s/blog_55f9aac5010096dv.html

抱歉!评论已关闭.