MFC中基于对话框的程序启动后自动隐藏

本文简单介绍一下VC中基于对话框的程序启动后的自动隐藏技术。

有的程序需要在启动后立即隐藏主窗口,只在系统托盘区域显示一个图标,这常见于很多后台服务程序。对于基于对话框的程序,要实现此功能需要一点技巧。

该技术的关键点在于,需要使用非模态对话框,而不是默认的模态对话框。模态对话框的DoModal()事实上执行了对话框的创建、显示、消息循环等一系列过程。我们这里要做的就是把这个过程重现,并控制中间的显示过程来达到我们隐藏主窗口的目的。现实起来非常简单,我们只需要把CXXXApp中的InitInstance()函数中默认的对话框显示代码:
BOOL CXXXApp::InitInstance()
{
// 其它代码

// 主窗口对话框实例
CXXXDlg dlg;
m_pMainWnd = &dlg;

// 模态对话框
dlg.DoModal();


return FALSE;
}

改变为如下代码即可,其它地方的代码完全不用修改:

BOOL CXXXApp::InitInstance()
{
// 其它代码

// 主窗口对话框实例
CXXXDlg dlg;
m_pMainWnd = &dlg;

// 非模态对话框
dlg.Create(CXXXDlg::IDD);
dlg.DoSomethingBeforeMsgLoop
(); // 可以在此函数隐藏窗口及执行其它操作
dlg.RunModalLoop();

return FALSE;
}

在上面的代码中,可以在DoSomethingBeforeMsgLoop ()函数中使用ShowWindow()来隐藏窗口,同时还可以执行其它一些操作,也可以直接在DoSomethingBeforeMsgLoop ()函数调用处调用ShowWindow()函数来隐藏窗口。

也有人提出了其它方法。比如仍然使用模态对话框,但使用计数器设定很短一个时间来触发事件,并在处理该计数器事件中隐藏窗口。该方法可行,但太麻烦,没有上面的方法方便。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值