CMenu m_menu; NOTIFYICONDATA m_notifyData; LRESULT OnTrayNotify(WPARAM wParam, LPARAM lParam); void CvideoHelperDlg::OnTraymenuRestore(); void CvideoHelperDlg::OnTraymenuExit(); void CvideoHelperDlg::OnTraymenuStartService(); void CvideoHelperDlg::OnTraymenuStopService();
#define WM_TRAY_MESSAGE (WM_APP + 100)
ON_MESSAGE(WM_TRAY_MESSAGE, OnTrayNotify) ON_COMMAND(ID_RMENU_SHOWWINDOW, &CvideoHelperDlg::OnTraymenuRestore) ON_COMMAND(ID_RMENU_EXIT, &CvideoHelperDlg::OnTraymenuExit) ON_COMMAND(ID_RMENU_STARTSERVICE, &CvideoHelperDlg::OnTraymenuStartService) ON_COMMAND(ID_RMENU_STOPSERVICE, &CvideoHelperDlg::OnTraymenuStopService)
void CvideoHelperDlg::OnTraymenuRestore() { ShowWindow(SW_SHOW); ShowWindow(SW_RESTORE); Shell_NotifyIcon(NIM_DELETE, &m_notifyData); }
void CvideoHelperDlg::OnTraymenuExit() { Shell_NotifyIcon(NIM_DELETE, &m_notifyData); clean4quit(); OnOK(); }
LRESULT CvideoHelperDlg::OnTrayNotify(WPARAM wParam, LPARAM lParam) { switch ((UINT)lParam) { case WM_LBUTTONUP: OnTraymenuRestore(); break; case WM_RBUTTONUP: case WM_CONTEXTMENU: CPoint pt; GetCursorPos(&pt); SetForegroundWindow(); m_menu.GetSubMenu(0)->TrackPopupMenu(TPM_BOTTOMALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, pt.x, pt.y, this); break; } return 0; }
OnInitDialog m_menu.LoadMenu(IDR_MENU_TRAY);
ZeroMemory(&m_notifyData, sizeof(NOTIFYICONDATA)); m_notifyData.cbSize = sizeof(NOTIFYICONDATA); m_notifyData.hWnd = this->m_hWnd; m_notifyData.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; m_notifyData.uID = IDR_MAINFRAME; m_notifyData.uCallbackMessage = WM_TRAY_MESSAGE; m_notifyData.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); _tcscpy_s(&m_notifyData.szTip[0], 128, TEXT("服务器程序"));
PostMessage(WM_SYSCOMMAND, SC_MINIMIZE);
void CvideoHelperDlg::OnDestroy() { CDialogEx::OnDestroy(); Shell_NotifyIcon(NIM_DELETE, &m_notifyData); }
void CvideoHelperDlg::OnSize(UINT nType, int cx, int cy) { CDialogEx::OnSize(nType, cx, cy);
if (nType == SIZE_MINIMIZED) { if (FALSE == Shell_NotifyIcon(NIM_ADD, &m_notifyData)) { MessageBox(TEXT("Unable to set tray icon"), TEXT("Error")); return; } ShowWindow(SW_HIDE); } }
|