想做一个基于对话框的程序,程序启动以后自动隐藏于托盘,不显示对话框也不在任务栏显示图标;也就是达到程序“悄悄的运行”,只在托盘能看出来程序运行着呢。
这就要分两个部分来做,
一,程序启动对话框隐藏,任务栏图标不显示。
二,程序隐藏到托盘,双击托盘恢复对话框的显示,右击托盘直接关闭程序。
首先来做第一部分,在网上搜到的删除托盘图标都使用的ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW); 也就是通过修改窗口格式来实现;我试了一下的确任务栏的图标不显示了,可是对话框上的最大化最小化图标也没了,为了保持对话框原有的模样,于是参考文章关于MFC程序中隐藏任务栏图标的问题,删除任务栏图标通过创建一个隐藏的窗口,然后设为主对话框的父窗口就行了,示例代码如下:
BOOL CxxxApp::InitInstance() { ...... CWnd m_wndOwner; if ( m_wndOwner.m_hWnd == NULL ) { LPCTSTR pstrOwnerClass = AfxRegisterWndClass(0); if ( !m_wndOwner.CreateEx(0, pstrOwnerClass, _T(""), //创建一个隐藏的弹出样式的窗口 WS_POPUP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, 0) ) return FALSE; } //CsaveParamReportDlg dlg; CxxxDlg dlg(&m_wndOwner); // 以隐藏的窗口作为父窗口 m_pMainWnd = &dlg; ...... // 销毁隐藏的父窗口 if (m_wndOwner.m_hWnd!=NULL) { m_wndOwner.DestroyWindow(); } return FALSE; }
通过上边的操作,在对话框初始化的时候,就可以使用如下代码隐藏任务栏图标:
ModifyStyleEx(WS_EX_APPWINDOW, 0);//从任务栏中去掉图标