设计任务栏托盘弹出菜单

c++ 专栏收录该内容
2 篇文章 0 订阅

设计任务栏托盘弹出菜单

  1. 首先申明变量
		NOTIFYICONDATA m_traydata;
  1. 在OnInitDialog()函数中,增加:
		m_traydata.cbSize = sizeof(NOTIFYICONDATA); 
		m_traydata.hIcon = AfxGetApp()->LoadIcon(IDI_TRAYICON);//IDI_TRAYICON为导入的托盘图标ICON 
		m_traydata.hWnd = m_hWnd; 
		char *m_str = "托盘提示标语"; 
		strncpy(m_traydata.szTip,m_str,strlen(m_str)+1);//strlen +1表示将空字符拷贝到目标字符串中 
		m_traydata.uCallbackMessage = WM_TRARMESSAGE; 
		m_traydata.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
  1. 缩小时,显示托盘图标,添加函数:
afx_msg void OnSysCommand(UINT nID, LPARAM lParam); 

在函数void CTrayPopMenuDlg::OnSysCommand(UINT nID, LPARAM lParam)的其中加入判断条件:

 	else if ((nID & 0xFFF0) == SC_MINIMIZE ) //缩小操作 
 	{ 
 		ShowWindow(SW_HIDE); 
 		Shell_NotifyIcon(NIM_ADD,&m_traydata); 
 	} 
  1. 退出时,同时退掉托盘图标;在退出函数OnCancel()中加入:
Shell_NotifyIcon(NIM_DELETE,&m_traydata);
  1. 增加托盘消息函数:
afx_msg void OnTrayMessage(WPARAM wParam, LPARAM lParam); 
ON_MESSAGE(WM_TRARMESSAGE,OnTrayMessage)//预先自定义WM_TRARMESSAGE;如: #define WM_TRARMESSAGE    201
void CTestDlg::OnTrayMessage(WPARAM wParam, LPARAM lParam) 
{ 
	if (lParam == WM_LBUTTONDOWN) 
	{ 
		ShowWindow(SW_RESTORE); 
	} 
	else if (lParam == WM_RBUTTONDOWN) 
	{ 
		CPoint m_point; 
		::GetCursorPos(&m_point); //显示弹出菜单 
		CIconMenu* m_submenu = (CIconMenu*)m_menu.GetSubMenu(0);/*CIconMenu为重绘菜单项,可参照上一个程序
		m_submenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, m_point.x,m_point.y,AfxGetApp()->m_pMainWnd,TPM_LEFTALIGN); 
	} 
}

链接: MFC中如何创建图标菜单.

  1. 附本例源程序–>>链接: 源程序.

  2. 程序实例图
    最终效果图

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值