MFC初始化时隐藏对话框

来源:互联网 发布:淘宝有哪些靠谱的日代 编辑:程序博客网 时间:2024/05/16 09:56


--《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);使对话框显示在系统任务栏中。

0 0
原创粉丝点击