自己动手写类似酷狗播放器(4)_系统托盘的显示

	任何一个应用程序,在开启后都会在任务栏的又下角显示一个图标,用来表示这个应用程序已经开启,比如QQ.那是如何做到 的呢?其实也是很简单,就是填充NOTIFYICONDATA结构体,这时候就需要对该结构体有个了解了,查找MSDN手册如下:

步骤:

1.填充NOTIFYICONDATA结构体


消息处理:当系统托盘图标发生鼠标事件时候,会给windows发送一个ucallbackmessage事件,去到指定窗口函数中响应。

         wParam:这时指的是 UID字段的值

lparam : 此时附带的鼠标动作 比如鼠标左键按下,右键按下,双击等等。比如,当鼠标在托盘图标移动的时候,lParam参数就发送WM_MOUSEMOVE事件。

2调用shell_notifyIcon 函数来增加或者删除图标

BOOL Shell_NotifyIcon(
    DWORD dwMessage,     //参数1:消息的种类 NIM_ADD/DELETE/MOTIFY 图标的添加,删除和更改
    PNOTIFYICONDATA pnid //参数2: NOTIFYICONdata结构体的指针
);
	以上两个步骤就可以显示一个系统托盘,但是这是没用的,因为并不会响应任何操作,所以我们接下来要做的就是加入消息处理

3.添加触发事件

	目的:当点击系统图标左键显示主对话框,右键弹出菜单项
当鼠标在托盘区域发生动作时候,就会产生NOTIFYICONDATA第五个参数的事件,我们这里是用自定义的事件
#define WM_TRAYMSG WM_USER+1   //自定义事件
也就是说当托盘区域的鼠标动作时,触发该事件,在这个事件下,来处理左键和右键。
	case WM_TRAYMSG: //响应自定义托盘事件
			{	
				if(wParam==1)  //先判断是否是在图标区域发生  1就是NOTIFYICONDATA 中UID 的数值
				{	
					switch(lParam)
						{
							case WM_LBUTTONDOWN: //鼠标左键按下 显示主界面
								{	
									ShowWindow(hDlg_main,SW_SHOWNORMAL);//正常显示主界面
								//	SetForegroundWindow(hDlg_main);
									 return 0;
								}
							case WM_RBUTTONDOWN: //右键加载菜单项
								{	
									POINT point;
									GetCursorPos(&point); //获取鼠标点击的位置
									HMENU hpopupmenu=CreatePopupMenu();  //创建弹出菜单
									HMENU hmenu_playmode=GetSubMenu(GetSubMenu(hmenu,0),2); //获取控制条目子菜单句柄
									AppendMenu(hpopupmenu,MF_STRING,IDM_PAUSEORSTART,TEXT("暂停/继续"));
									AppendMenu(hpopupmenu,MF_SEPARATOR,NULL,NULL); //添加下划线
									AppendMenu(hpopupmenu,MF_POPUP,(UINT)hmenu_playmode,TEXT("播放模式"));
									AppendMenu(hpopupmenu,MF_SEPARATOR,NULL,NULL); //添加下划线
									AppendMenu(hpopupmenu,MF_STRING,IDM_QUIT,TEXT("退出"));
									SetForegroundWindow(hDlg_main);//必须要设置所在的窗口为前台 
									TrackPopupMenu(hpopupmenu,TPM_RIGHTBUTTON,point.x,point.y,0,hDlg_main,NULL); //显示菜单项
									return 0;
								}
						}
				}
				break;
			
			}
	注意在上面的右键操作中处理,在菜单弹出前,必须将该菜单所在的窗口设置为前台窗口,不然这个菜单只能显示,当点击任意其他地方都是消失的。
 
 
 
 
 
 
 
 


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值