1 在系统菜单中建立菜单项
1.新建对象
public: CMenu * m_pMenu; UINT IDI_PECULIARMENU;
2.向菜单栏添加菜单项m_pMenu = GetSystemMenu(FALSE); m_pMenu->AppendMenu(MF_STRING,IDI_PECULIARMENU,"系统菜单");
3.系统消息响应
void CMenuDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else if(nID ==IDI_PECULIARMENU) { MessageBox("系统菜单","提示",MB_OK|MB_ICONINFORMATION); } else { CDialog::OnSysCommand(nID, lParam); } }
2 最小化至系统托盘
1.新建对象
NOTIFYICONDATA m_traydata;
CMenu m_menu; m_traydata.cbSize=sizeof(NOTIFYICONDATA); m_traydata.hIcon=AfxGetApp()->LoadIcon(IDI_TRAYICON); m_traydata.hWnd=m_hWnd; char *m_str="系统管理"; strncpy(m_traydata.szTip,m_str,strlen(m_str)+1); m_traydata.uCallbackMessage=WM_TRAYMESSAGE; m_traydata.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;
2.创建消息映射
#define WM_TRAYMESSAGE 201 afx_msg void OnTrayMessage(WPARAM wParam, LPARAM lParam);
3.消息路由
ON_MESSAGE(WM_TRAYMESSAGE,OnTrayMessage) void CPopmenuDlg::OnTrayMessage(WPARAM wParam, LPARAM lParam) { if (lParam == WM_LBUTTONDBLCLK) { ShowWindow(SW_RESTORE); } else if (lParam == WM_RBUTTONDOWN) { LPPOINT lpoint=new tagPOINT; ::GetCursorPos(lpoint);//得到鼠标位置 m_menu.CreatePopupMenu(); m_menu.AppendMenu(MF_STRING,WM_DESTROY,"退出"); m_menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this); HMENU hmenu=m_menu.Detach(); m_menu.DestroyMenu(); delete lpoint; } }