mfc添加托盘图标

  1. 创建图标
//在OnInitDialog方法中调用
NOTIFYICONDATA  data;
	data.cbSize = sizeof(NOTIFYICONDATA);//结构体的大小
	data.hWnd = this->m_hWnd;//接收托盘消息的窗口句柄 this是当前dialog
	data.uID = IDR_MAINFRAME;//定义的托盘图标ID
	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);// 向任务栏的状态栏发送添加托盘图标的消息
  1. 添加系统菜单
    资源视图->右键添加资源->menu->创建:
    在这里插入图片描述
  2. 在dialog的头文件中定义菜单变量:
 CMenu menu;
  1. 为菜单变量加载菜单,也是在OnInitDialog中
menu.LoadMenu(IDR_MENU1); //装载自定义的右键菜单 
  1. 设置响应托盘点击事件的方法
ON_MESSAGE(WM_ONTRAY, OnTray)
  1. 定义响应事件
afx_msg LRESULT OnTray(WPARAM wParam, LPARAM lParam);
  1. 响应事件方法实现
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;
}
  1. 为菜单上的按钮添加事件
ON_COMMAND(ID_32771, OnBnClickedButton1)
	ON_COMMAND(ID_32772, OnBnClickedButton2)
	ON_COMMAND(ID_32773, OnBnClickedButton3)
  1. 方法定义和实现
afx_msg void OnBnClickedButton3();
void CBcguess3Dlg::OnBnClickedButton3()
{
	// todo
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章