程序托盘实现

第一步: 添加注册托盘功能函数

void CProgramNoteDlg::RegisterNotifyIcon()
{
	memset(&m_nid, 0, sizeof(NOTIFYICONDATA)); 	// m_nid是成员变量 NOTIFYICONDATA
	m_nid.cbSize = sizeof(NOTIFYICONDATA);
	m_nid.hWnd = m_hWnd;
	m_nid.uID = IDR_MAINFRAME;				// 图标ID
	m_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;	// 产生消息的操作
	m_nid.uCallbackMessage = WM_SHELLICONNOTIFY;		// 自定义消息
	m_nid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	memcpy(m_nid.szTip, TEXT("编程笔记"), strlen(TEXT("编程笔记")));

	Shell_NotifyIcon(NIM_ADD, &m_nid);	// 添加托盘
}

在程序初始化的时候调用该函数

第二步:添加反注册托盘功能函数

void CProgramNoteDlg::UnRegisterNotifyIcon()
{
	Shell_NotifyIcon(NIM_DELETE, &m_nid);	// 解除托盘
}

在程序退出的时候调用该函数

第三步:添加自定义消息,响应消息

1、定义消息
#define WM_SHELLNOTIFY    (WM_USER + 1)
2、添加消息响应函数
afx_msg LRESULT OnShellNotify(WPARAM wParam, LPARAM lParam);
3、关联消息和响应函数
ON_MESSAGE(WM_SHELLNOTIFY, CXXXDlg::OnShellNotify)
4、实现响应函数
// wParam : 发送消息的图标ID
// lParam : 鼠标消息

LRESULT CProgramNoteDlg::OnShellNotify(WPARAM wParam, LPARAM lParam)
{
	if (wParam != IDR_MAINFRAME)
		return 0;

	switch (lParam)
	{
	case WM_LBUTTONDBLCLK:
		ShowWindow(SW_SHOWNORMAL);  // 显示窗体
		SetForegroundWindow();	    // 使窗口置顶
		break;
	
	case WM_RBUTTONUP:
	case WM_LBUTTONUP:
	// ........  可以添加右键菜单响应
		break;
	}

	return 0;
}

主要涉及函数:

BOOL Shell_NotifyIcon(
    DWORD dwMessage, 
    PNOTIFYICONDATA pnid
);
dwMessage:输入参数,传递发送的消息,表明要执行的操作。可选的值如下:
  NIM_ADD        向托盘区域添加一个图标。此时第二个参数lpdata指向的NOTIFYICONDATA结构体中的hWnd和uID成员
                          用来标示这个图标,以便以后再次使用Shell_NotifyIcon对此图标操作。
  NIM_DELETE    删除托盘区域的一个图标。此时第二个参数lpdata指向的NOTIFYICONDATA结构体中的hWnd和uID成员
                            用来标示需要被删除的这个图标。
  NIM_MODIFY    修改托盘区域的一个图标。此时第二个参数lpdata指向的NOTIFYICONDATA结构体中的hWnd和uID成员
                           用来标示需要被修改的这个图标
  NIM_SETFOCUS    Version 5.0. 设置焦点。比如当用户操作托盘图标弹出菜单,而有按下ESC键将菜单消除后,程序
                             应该使用此消息来将焦点设置到托盘图标上
  NIM_SETVERSION    Version 5.0. 设置任务栏按照第二个参数lpdata指向的NOTIFYICONDATA结构体中的uVersion成员指
            定的版本号来工作。此消息可以允许用户设置是否使用基于Windows2000的version 5.0的风格。
            uVersion的缺省值为0,默认指明了使用原始Windows 95图标消息风格。具体这两者的区别请参考msdn
            中的Shell_NotifyIcon函数说明的Remarks
lpdata:输入参数,是指向NOTIFYICONDATA结构体的指针,结构体内容用来配合第一个参数wMessage进行图标操作
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值