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

来源:互联网 发布:中国银行软件开发中心 编辑:程序博客网 时间:2024/06/05 15:35
任何一个应用程序,在开启后都会在任务栏的又下角显示一个图标,用来表示这个应用程序已经开启,比如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;}
注意在上面的右键操作中处理,在菜单弹出前,必须将该菜单所在的窗口设置为前台窗口,不然这个菜单只能显示,当点击任意其他地方都是消失的。

	
				
		
原创粉丝点击