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