注册系统托盘

注册状态栏的图标

	 NOTIFYICONDATA ni={0};
	 ni.cbSize=sizeof(NOTIFYICONDATA);
	 ni.hWnd=this->m_hWnd;
	 ni.uFlags=NIF_ICON|NIF_MESSAGE|NIF_INFO|NIF_TIP;
	 ni.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
	 wcscpy_s(ni.szInfo, _T("HFUT打印服务客户端"));
	// ni.hIcon=(HICON)LoadImage(AfxGetInstanceHandle(),TEXT("G:\\vc++\\vs2010\\注册系统托盘\\注册系统托盘\\res\\1.ico"),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);

	 ni.uID=0;
	// ni.szInfo=L"测试状态栏图标";
	 wcscpy_s(ni.szTip, _T("HFUT打印服务客户端"));
	 ni.uTimeout=2000;
	 ni.uCallbackMessage=WM_TESTAREA;
	 Shell_NotifyIcon(NIM_ADD,&ni);

uFlags指示哪些数据有效,NIF_ICON,这表明hIcon有效

加载图标有多种方式LoadIcon(AfxGetInstancleHandle(),MAKEINTRESOURCE(IDI-ICONID);

或者说比较新的LoadImage函数

NIF_INFO,这表明(用气泡窗口显示这个信息,还可以指定现实时间)

Use a balloon ToolTip instead of a standard ToolTip. The szInfo, uTimeout, szInfoTitle, and dwInfoFlags members are valid
wcscpy_s(ni.szTip, _T("HFUT打印服务客户端"));
ni.uTimeout=2000;
NIF_MESSAGE
ni.uCallbackMessage=WM_TESTAREA;
这表明单注册图标发生鼠标事件时候,先图标所有者hWnd发送消息WM_TESTAREA,这是一个自定义消息
其消息处理函数
  声明:
afx_msg LRESULT test(WPARAM wParam, LPARAM lParam);
实现
LRESULT CShellNotifiyDlg::test(WPARAM wParam, LPARAM lParam)
{
    UINT uMessageType = (UINT)lParam;//其中lParam是鼠标事件类型参数
    // 右击系统托盘小图标,弹出菜单

    if (WM_RBUTTONDOWN == uMessageType)
    {
//this->SetForegroundWindow();
this->ShowWindow(SW_RESTORE);//重新显示窗口,激活并且显示窗口
       // MessageBox(TEXT("单击右键"));
    }
    else if (WM_LBUTTONDBLCLK == uMessageType)
    {
this->SetForegroundWindow();
        MessageBox(TEXT("单击左键"));

 }

    return 0;
}
UIF_TIP是指,当你鼠标移到托盘图标的时候,现实的提示消息

Shell_NotifyIcon函数,向任务栏的状态栏发送一个消息 ,注册,删除,修改  
函数原型   
BOOL Shell_NotifyIcon(  
 DWORD dwMessage,   
PNOTIFYICONDATA lpdata   
);   
参数:   
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进行图标操作。  
 如果图标操作成功返回TRUE,否则返回FALSE。   
如果dwMessage参数设为NIM_SETVERSION,则如果版本设置成功返回TRUE,如果设置的版本不支持返回FALSE。   
该函数主要用于任务栏右侧的托盘图标的操作。在MFC中,实现最小化到托盘的具体操作如下:   
1.在Resource里新建一个图标 Icon 。   
2.在窗体类里添加 NOTIFYICONDATA 结构体对象 m_nfData,可以在OnInitDialog()方法里对结构体进行初始化。  
 3.重写OnSize(UINT,int,int)函数,自行处理SIZE_MINIMIZED 消息,即点击最小化后的处理。
例如:   
void CYourProjectDlg::OnSize(UINT nType, int cx, int cy)   
{   if( nType == SIZE_MINIMIZED ) //截获消息   
{   
Shell_NotifyIcon(NIM_ADD,&m_nfData);  
 ShowWindow(SW_HIDE);  
 }   
else //其他消息按默认处理方式处理   
CDialog::OnSize(nType, cx, cy);   }   
4.添加消息映射,处理WM_TRAYICON消息,即点击托盘图标后的处理   
ON_MESSAGE(WM_TRAYICON,&CYourProjectDlg::OnTrayIcon)   
5.实现消息映射函数,添加具体操作,
例如:   LRESULT CLogCleanToolDlg::OnTrayIcon(WPARAM wParam, LPARAM lParam)  
 {   
if(lParam == WM_LBUTTONDBLCLK) //双击托盘图标  
 {   
Shell_NotifyIcon(NIM_DELETE,&m_nfData);  
 ShowWindow(SW_SHOWNORMAL);   
SetForegroundWindow();  
 }   
return 0;   
}   
以上就是最常见的用法。如果要其他个性操作,只需修改NOTIFYICONDATA结构体的参数即可。






NOTIFYICONDATA结构体
  NOTIFYICONDATA结构 
---- NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提示消息、图标对应的窗口等内容。其定义为:




NOTIFYICONDATA
typedef struct _NOTIFYICONDATA {      DWORD cbSize;      
HWND hWnd;    
  UINT uID;     
 UINT uFlags;     
 UINT uCallbackMessage;     
 HICON hIcon;      
char szTip[64];
 } NOTIFYICONDATA, *PNOTIFYICONDATA; 
Contains information that the system needs to process taskbar status area messages.


typedef struct _NOTIFYICONDATA 

 DWORD cbSize; //以字节为单位的这个结构的大小
 HWND hWnd; //接收托盘图标通知消息的窗口句柄
 UINT uID; //应用程序定义的该图标的ID号
 UINT uFlags; //设置该图标的属性
 UINT uCallbackMessage; //应用程序定义的消息ID号,此消息传递给hWnd
 HICON hIcon; //图标的句柄
 char szTip[64]; //鼠标停留在图标上显示的提示信息
} NOTIFYICONDATA, *PNOTIFYICONDATA;
 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值