想做一个基于对话框的程序,程序启动以后自动隐藏于托盘,不显示对话框也不在任务栏显示图标;也就是达到程序“悄悄的运行”,只在托盘能看出来程序运行着呢。

这就要分两个部分来做,

一,程序启动对话框隐藏,任务栏图标不显示。

二,程序隐藏到托盘,双击托盘恢复对话框的显示,右击托盘直接关闭程序。

 首先来做第一部分,在网上搜到的删除托盘图标都使用的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);//从任务栏中去掉图标

 

 

 

 

posted on 2018-10-19 16:53  lazybee  阅读(234)  评论(0编辑  收藏  举报