- 创建图标
NOTIFYICONDATA data;
data.cbSize = sizeof(NOTIFYICONDATA);
data.hWnd = this->m_hWnd;
data.uID = IDR_MAINFRAME;
data.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
lstrcpyn(data.szTip, _T("单击右键显示菜单"), sizeof(_T("单击右键显示菜单")));
data.uCallbackMessage = WM_ONTRAY;
data.hIcon = ::LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
Shell_NotifyIcon(NIM_ADD, &data);
- 添加系统菜单
资源视图->右键添加资源->menu->创建:
- 在dialog的头文件中定义菜单变量:
CMenu menu;
- 为菜单变量加载菜单,也是在OnInitDialog中
menu.LoadMenu(IDR_MENU1);
- 设置响应托盘点击事件的方法
ON_MESSAGE(WM_ONTRAY, OnTray)
- 定义响应事件
afx_msg LRESULT OnTray(WPARAM wParam, LPARAM lParam);
- 响应事件方法实现
LRESULT CBcguess3Dlg::OnTray(WPARAM wParam, LPARAM lParam) {
UINT uMouseMsg = (UINT)lParam;
if (uMouseMsg == WM_RBUTTONDOWN) {
CMenu* pPopup = menu.GetSubMenu(0);
CPoint point;
GetCursorPos(&point);
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_VERTICAL,
point.x, point.y, AfxGetApp()->m_pMainWnd, TPM_LEFTALIGN);
}
if (uMouseMsg == WM_LBUTTONDBLCLK) {
ShowWindow(SW_SHOWNOACTIVATE);
}
return 0;
}
- 为菜单上的按钮添加事件
ON_COMMAND(ID_32771, OnBnClickedButton1)
ON_COMMAND(ID_32772, OnBnClickedButton2)
ON_COMMAND(ID_32773, OnBnClickedButton3)
- 方法定义和实现
afx_msg void OnBnClickedButton3();
void CBcguess3Dlg::OnBnClickedButton3()
{
}