C++之MFC系统图标任务托盘显示



    MFC支持将任务图标放在系统任务托盘中显示,通过NOTIFYICONDATA结构体实现,下面具体阐述其实现方法:

    1.定义结构体变量

        NOTIFYICONDATA m_NotifyIcon;

           2.结构体成员变量赋值

	m_NotifyIcon.cbSize = sizeof(NOTIFYICONDATA);     // 结构大小
	m_NotifyIcon.hWnd = this->m_hWnd;                 // 接收托盘消息的窗口句柄
	m_NotifyIcon.uID = IDR_MAINFRAME;                 // 应用程序中定义的托盘图标ID
	m_NotifyIcon.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); // 托盘图标句柄
	wcscpy(m_NotifyIcon.szTip,_T("SunjianDlg System Icon Test")); // 图标显示提示字符串
	m_NotifyIcon.uCallbackMessage = WM_USER_NOTIFY;               // 自定义消息,接收图标发送的消息
	m_NotifyIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;       // 设置属性
      结构体成员变量还有其他其他内容项,经常使用的是以上几项内容。

    3.执行添加任务栏图标程序

       Shell_NotifyIcon(NIM_ADD,&m_NotifyIcon);

              NIM_ADD 表示添加图标;NIM_DELETE表示删除图标;NIM_MODIFY表示修改图标

    4.结束后删除图标

      Shell_NotifyIcon(NIM_DELETE,&m_NotifyIcon);

      其中任务栏图标和应用程序通过先前定义的自定义消息(也可使用系统消息)进行通信,

// 托盘图标消息响应函数,其中wParam参数标示了消息事件发生的任务栏图标ID,
// lParam参数根据事件的不同,包含了鼠标或键盘的具体消息。
LRESULT CSunjianDlgTestDlg::OnNotifyMsg(WPARAM wparam, LPARAM lparam)
{
	if( wparam != IDR_MAINFRAME )
	{
		return -1;
	}

	switch(lparam)
	{
	case WM_LBUTTONDOWN:
		{
			if( TRUE == m_ShowFlag )
			{
				m_ShowFlag = FALSE;
				ShowWindow(SW_HIDE);
			}
			else
			{
				m_ShowFlag = TRUE;
				ShowWindow(SW_SHOW);
			}
		}
		break;

	case WM_RBUTTONDOWN:
		{
			// 注意:菜单是弹出式菜单,菜单索引项是弹出式菜单,子菜单不是
			CMenu menu;
			menu.LoadMenuW(IDR_MENU2);
			CMenu* pPopup = menu.GetSubMenu(0);  // 获取菜单句柄,参数表示菜单位置,索引值
			POINT pt;
			GetCursorPos(&pt);
			pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,pt.x,pt.y,this); // 其中可添加TPM_RETURNCMD选项,返回值表示选中的菜单ID项
			pPopup->DestroyMenu();               // 菜单销毁                        // 在此直接使用菜单项处理程序
		}
		break;
	}
}



      

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值