MFC 为程序制作一个系统托盘图标、显示隐藏任务栏图标

以MFC对话框程序为例,为此对话框程序制作一个系统托盘图标。

    1、 首先定义一个 NOTIFYICONDATA 类型的类成员变量 m_NotifyIcon;

    2、  在BOOL CxxxDlg::OnInitDialog()函数中对m_NotfyIcon 初始化:

           m_NotifyIcon.cbSize = sizeof(NOTIFYICONDATA);
           m_NotifyIcon.hWnd = this->GetSafeHwnd();
           strcpy(m_NotifyIcon.szTip,"文件夹监视程序");//提示文字
           m_NotifyIcon.uCallbackMessage = WM_ICONMESSAGE;//回调消息
           m_NotifyIcon.uFlags = NIF_MESSAGE|NIF_TIP|NIF_ICON;//新增标志
           m_NotifyIcon.hIcon = m_hIcon;//图标句柄
           m_NotifyIcon.uID = IDR_MAINFRAME;
           Shell_NotifyIcon(NIM_ADD,&m_NotifyIcon);//为系统托盘增加此图标
   3、在 xxxDlg.cpp 文件中增加3个宏定义:

        #define WM_ICONMESSAGE WM_USER + 101
        #define ID_MENU_EXIT   10005
        #define ID_MENU_SHOW   10008

  4、重载虚基类函数 LRESULT CxxxDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam),并在函数中增加如下代码

LRESULT CxxxDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	// TODO: 在此添加专用代码和/或调用基类
	switch(message)
	{
	case WM_ICONMESSAGE:
		if(lParam == WM_RBUTTONDOWN)
		{
			CMenu menu;
			CPoint point;
			GetCursorPos(&point);
			menu.CreatePopupMenu();
			menu.AppendMenu(MF_STRING, ID_MENU_SHOW, _T("显示/隐藏"));
			menu.AppendMenu(MF_SEPARATOR);
			menu.AppendMenu(MF_STRING, ID_MENU_EXIT, _T("退出程序"));

			menu.TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this, NULL);
			menu.DestroyMenu();
		}
		break;
	default:
		break;
	}
	return CDialogEx::DefWindowProc(message, wParam, lParam);
}
5、为程序添加显示/隐藏及退出的操作。增加两个成员函数OnMenuShow()和OnMenuExit();

void CxxxDlg::OnMenuExit(void)
{
	SendMessage(WM_CLOSE, 0, 0);//发送关闭程序消息
}


void CxxxDlg::OnMenuShow(void)
{
	if(IsWindowVisible())//若当前窗口为显示状态则隐藏,否则反之
	{
		ShowWindow(SW_HIDE);
	}
	else
	{
		ShowWindow(SW_SHOW);
	}
}
6、为程序添加上面两个函数的消息映射,在BEGIN_MESSAGE_MAP(CxxxDlg, CDialogEx) 与END_MESSAGE_MAP()之间添加如下代码:

	ON_COMMAND(ID_MENU_EXIT, OnMenuExit)
	ON_COMMAND(ID_MENU_SHOW, OnMenuShow)

7、 有关 NOTIFYICONDATA 结构体的知识


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值