vc++ 最小化到托盤的詳細實現


在VC++中,想實現將MFC最小化到系統托盤,需要調用NOTIFYICONDATA類,並注冊相應的消息,以下詳細講解如何實現:

1。聲明一個NOTIFYICONDATA類,也就是NOTIFYICONDATA NotifyIcon;該句可以放在Dlg類的聲明中,作為Dlg類的一個成員;也可以放在Dlg類的實現中,作為全局變量來使用。

2。聲明一個響應函數afx_msg LRESULT OnClickTray(WPARAM wParam,LPARAM IParam);用於響應鼠標操作。將這個函數放入Dlg類的聲明中,作為Dlg類的一個成員。

3。自定義消息,用於點擊托盤 來響應的消息:

定義消息名稱和消息號:#define WM_CLICK_TRAY (WM_USER+001),1001只是用於指定一個消息號,可以隨便指定。注冊則是在BEGIN_MESSAGE_MAP(Dlg,CDialog)和END_MESSAGE_MAP()之間添加ON_MESSAGE(WM_NC,OnClickTray)。

4。最小化到托盤實現:本例是點擊最小化按鈕將對話框程序最小化到托盤:實現代碼如下:

void CDesktopUtilDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else if(nID ==SC_MINIMIZE )
{
NotifyIcon.cbSize=sizeof(NOTIFYICONDATA);
NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
NotifyIcon.hWnd=m_hWnd;
lstrcpy(NotifyIcon.szTip,L"NotifyIcon Test");
NotifyIcon.uCallbackMessage=WM_CLICK_TRAY;
NotifyIcon.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
Shell_NotifyIcon(NIM_ADD,&NotifyIcon);
ShowWindow(SW_HIDE);
}
else
{
CDHtmlDialog::OnSysCommand(nID, lParam);
}
}

5。點擊托盤圖標響應事件:afx_msg LRESULT OnClickTray(WPARAM wParam,LPARAM IParam);功能是點擊托盤圖標的時候還原對話框程序,實現代碼如下:

LRESULT CDesktopUtilDlg::OnClickTray(WPARAM wParam,LPARAM IParam)
{
if ((IParam == WM_LBUTTONDOWN) || (IParam == WM_RBUTTONDOWN))
{
ModifyStyleEx(0,WS_EX_TOPMOST);
ShowWindow(SW_SHOW);
}
return 0;
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM