2024年4月2日发(作者:)

对话框隐藏的几种方法

有很多应用程序要求一起动就隐藏起来,这些程序多作为后台程序运行,希望不影响

其他窗口,往往只在托盘区显示一个图标。这些程序通常都是对话框程序,而对话框在初

始化的过程上与SDI、MDI的初始化是不同的,对话框只需要DoModule或者是

CreateDialog等等对话框函数调用一次便可,SDI、MDI则要好几步才行。这样看来,对

话框在使用方法上面是隐藏了不少细节的,其中就没有SDI、MDI所要求的

ShowWindow(nCmdShow)这一步。因此对话框要想一运行就隐藏,并不是很直接的。

有一些方法可以做到这一点,下面我们就来看看几种方案。

1.定时器

最直观,又是最无奈的一个方法就是使用定时器。既然我们在对话框开始显示之前不

能用ShowWindow(SW_HIDE)将其隐藏,那就给一个时间让它显示,完了我们在隐藏它。

方法:

1.在OnInitDialog()函数里设置定时器:(WINDOWS API里面响应消息

WM_INITDIALOG)

SetTimer(1, 1, NULL);

2.添加处理WM_TIMER的消息处理函数OnTimer,添加代码:

if(nIDEvent == 1)

{

DeleteTimer(1);

ShowWindow(SW_HIDE);

}

这种方法的缺点是显而易见的,使用定时器,使得程序的稳定性似乎打一个折扣;窗

口是要先显示出来的,那么效果就是窗口闪了一下消失。

2.改变对话框显示状况

在对话框初始化时改变其显示属性可以让它隐藏起来。方法是调用

SetWindowPlacement函数:

BOOL CDialogExDlg::OnInitDialog()

{

CDialog::OnInitDialog();

//DO something

WINDOWPLACEMENT wp;