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

MFC初始化可分为项目初始化对话框初始化等方面,以下是具体方法及步骤: ### 项目初始化 在Visual Studio 2017中,可按如下步骤进行MFC项目初始化:从Visual Studio下新建MFC项目,在应用程序类型中选择“基于对话框”,其它保持默认,点击“完成”便生成项目,生成的项目结构可进行界面改动和组件添加等操作,点击运行即可运行当前的初始化项目[^1]。 ### 对话框初始化 #### 图标设置 在对话框初始化函数中,可设置对话框的图标,示例代码如下: ```cpp // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon return TRUE; // Return TRUE unless you set the focus to a control ``` 此代码用于设置对话框的大图标和小图标,若不将焦点设置到某个控件上则返回`TRUE` [^2]。 #### 对话框大小设置 若要使对话框全屏显示,可使用如下代码: ```cpp //得到显示器大小 int cx,cy; cx = GetSystemMetrics(SM_CXSCREEN); cy = GetSystemMetrics(SM_CYSCREEN); //再用MoveWindow CRect rcTemp; rcTemp.BottomRight() = CPoint(cx, cy); rcTemp.TopLeft() = CPoint(0, 0); MoveWindow(&rcTemp); ``` 上述代码先获取显示器的宽度和高度,然后使用`MoveWindow`函数将对话框大小设置为全屏 [^4]。 ### 程序基本执行步骤 MFC程序会进入`Winmain`函数(`_tWinMain`为宏,值为`WinMain`),该函数并非用户编写,而是隐藏在`D:/Program Files/Microsoft Visual Studio/VC98/MFC/src/WINMAIN.CPP`文件中 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值