1: 系统托盘图标显示
系统托盘图标显示
NOTIFYICONDATA tnd; //这个是托盘图标数据
tnd.cbSize=sizeof(NOTIFYICONDATA);
tnd.hWnd=this->m_hWnd;
tnd.uID=IDR_MENU1; //菜单ID
tnd.uFlags=NIF_TIP|NIF_MESSAGE|NIF_ICON; //控制结构体重的TIP,message和icon是否有效
tnd.uCallbackMessage=WM_SHELLNOTIFY; //图标相应的回调函数的消息ID
tnd.hIcon=::LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDC_RECORD)); //加载ICON
strcpy(tnd.szTip,"look"); //TIP显示文字
Shell_NotifyIcon(NIM_ADD,&tnd);//注册notifyicon
通过图表响应消息函数中的参数wparam,lparam中的lparam来判断消息类型,如lparam==WM_RBUTTONDOWN判断是否右键图标。菜单中的item的响应函数则在本身菜单的响应函数中处理即可。
void CNotifyplayDlg::OnShellNotify(WPARAM wParam,LPARAM lParam){
if(lParam==WM_LBUTTONDOWN){ //捕捉托盘小图标的左键消息,使其显示窗口
this->ShowWindow(SW_NORMAL);
}
if(lParam==WM_RBUTTONDOWN){ //捕捉托盘小图标的左键消息,使其显示菜单
CMenu menu;
menu.LoadMenu(IDR_MENU1);
if(watchclip){
menu.EnableMenuItem(ID_MENUITEM0,1); //设置某个item是否有效。
}
else
menu.EnableMenuItem(ID_MENUITEM1,1);
CPoint point;
GetCursorPos(&point);//获取鼠标坐标
this->SetForegroundWindow(); //将本线程窗口置顶
//因为菜单中有多个1级菜单,所有这里GetSubMenu的作用就是选择显示第几个1级菜单。然后弹出菜单,并追踪弹出菜单中被选择的项
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTBUTTON|TPM_RIGHTBUTTON,point.x,point.y,this,NULL);
}
}
可以下载这个看下,练习用,很乱。
http://cid-ce161157b01b32c8.skydrive.live.com/self.aspx/.Public/notifyplay.rar