VS2010 MFC 启动立刻隐藏窗口 最小化托盘

MFC添加最小化托盘(右下角小图标)

方法网上很多,我也是按照如上实现

vs2010写的

Dlg的.h文件添加

NOTIFYICONDATA   nid; //托盘图标

Dlg的.cpp文件,OnInitDialog添加:

nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);   
    nid.hWnd=this-> m_hWnd;   
    nid.uID=IDR_MAINFRAME;   
    nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP   ;   
    nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称   
    nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));   
    _tcscpy_s(nid.szTip,sizeof(nid.szTip), _T("计划任务提醒 "));//信息提示条为“计划任务提醒”   
    Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标

这样托盘图标就一直显示了。

单击托盘,显示隐藏窗口,需要创建:

Dlg的cpp文件BEGIN_MESSAGE_MAP添加:ON_MESSAGE(WM_SHOWTASK,OnShowTask)

Dlg的.h文件添加宏#define WM_SHOWTASK (WM_USER+100) 和 LRESULT OnShowTask(WPARAM wParam, LPARAM lParam);

Dlg的cpp文件文件添加事件具体处理函数【右键出现删除,左键单击一次隐藏一次显示,ifMainWinShow自己的全局变量在.h定义即可】

LRESULT CcaptureDlg::OnShowTask(WPARAM wParam, LPARAM lParam)
{
    if(wParam != IDR_MAINFRAME)
        return 1;
    switch(lParam)
    {
    case WM_RBUTTONUP:                                        // 右键起来时弹出菜单
        {
            LPPOINT lpoint = new tagPOINT;
            ::GetCursorPos(lpoint);                    // 得到鼠标位置
            CMenu menu;
            menu.CreatePopupMenu();                    // 声明一个弹出式菜单
            menu.AppendMenu(MF_STRING, WM_DESTROY, L"关闭");
            menu.TrackPopupMenu(TPM_LEFTALIGN, lpoint->x ,lpoint->y, this);
            HMENU hmenu = menu.Detach();
            menu.DestroyMenu();
            delete lpoint;
        }
        break;
    case WM_LBUTTONDOWN:                           // 双击左键的处理
        {
            if (!ifMainWinShow)
            {
                this->ShowWindow(SW_SHOWNORMAL);         // 显示主窗口
                ifMainWinShow = true;
            }
            else
            {
                this->ShowWindow(SW_HIDE);         // 隐藏主窗口
                ifMainWinShow = false;
            }
            
        }
        break;
    }
    return 0;
}

如上是网上查到的常规最小化托盘,但是有个问题程序启动会出现窗口,我希望启动就隐藏。

尝试经过很多尝试:

在OnInitDialog添加

ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);//从任务栏中去掉.

ShowWindow(SW_MINIMIZE);//注意此处是最小化,不是SW_HIDE

此时程序的一直不会出现在任务栏(即使窗口显示的时候),恰好符合我的要求。


你可能感兴趣的:(c++)