1. 程式人生 > >VS2010 MFC 啟動立刻隱藏視窗 最小化托盤

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

此時程式的一直不會出現在工作列(即使視窗顯示的時候),恰好符合我的要求。