基于对话框的的程序,如果要达到完全运行时隐藏,光将对话框的Visible属性设为FALSE是不够的,因为副对话框在App初始化的时候一个DoModal(),对话框就会显示出来,如果在对话框的OnInitDialog()使用如下两行代码:
SetWindowPos(&wndBottom, 0, 0, 0, 0, SWP_HIDEWINDOW); ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);
虽然能去掉窗体和任务栏上的图标,但避免不了,程序窗口的一闪,而且,在任务管理器的任务列表里会有该程序的运行图标。
如果在App的InitInstance()里将显示对话框的模式从“模式”改写为“无模式”,则能达到后台执行该对话框程序的目的,首先将父对话框的Visible属性设为FALSE,然后在程序的App类中定义一个成员变量:
CWnd* m_pWnd;
在程序的App类里面的InitInstance()里面将模式显示部分注释掉,改为:
CMyTestDlg* pDlg = new CMyTestDlg(); m_pWnd = pDlg; m_pMainWnd = pDlg; return pDlg->Create(IDD_MYTEST_DIALOG);
重写ExitInstance(),加入:
delete m_pWnd;
这样就达到了后台启动MFC对话框程序了。