系统托盘程序

系统托盘程序

与系统托盘通信的函数:Shell_NotifyIcon(DWORD dwMessage,PNOTIFYICONDATA pnid)
第一个参数dwMessage可以取以下值:
(1)NIM_ADD 向托盘中加入一个图标;
(2)NIM_MODIFY修改托盘中的图标;
(3)NIM_DELETE 从托盘中删除一个图标。
第二个参数是NOTIFYICONDATA结构的一个指针。该结构原型为:
typedef struct_NOTIFYICONDATA
{
DWORD chSize;//结构的大小必须在程序中给出
HWND hWnd;//要接收托盘消息的窗口句柄
UINT uID;//应用程序中定义的托盘图标ID,此参数用作标识
UINT uFlags;//设置属性,低三位有意义,0---7,如下:
             //第一位#define NIF_MESSAGE 0x1,表示 uCallbackMessage参数有效
             //第二位#define NIF_ICON 0x2,表示hIcon有效
             //第三位#define NIF_TIP 0x4,表示szTip参数有效
UINT uCallbackMessage; //自定义的消息ID值,一定不要与已有的消息ID相重。
HICON hIcon;//显示在系统托盘上的ICON的句柄,可以为系统的IDI_WINLOGO等。
CHAR szTip[64];//用于图标显示的提示字符串。
}NOTIFYICONDATA;

为了接收来自托盘的通知消息,可以将uCallbackMessage设定为所定义的消息ID值,同时设定

NIF_MESSAGE标志。这样当用户在图标上移动或按下鼠标时,WINDOWS将发出消息,该消息的

MessageID是在uCallbackMessage中定义的值;wParam是定义的uID的值;而lParam是鼠标事件,

如WM_LBUTTONDOWN。
在WTL下的一个例子:
#define WM_TRAYICON  WM_APP+100
MESSAGE_HANDLER(WM_TRAYICON,OnTrayIcon)

LRESULT CMainFrame::OnTrayIcon(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL&

bHandled)
{
 UINT uMouseMsg = (UINT)lParam;
 switch(uMouseMsg)
 {
 case WM_LBUTTONDOWN:
  MessageBox("左","左",MB_OK);
  break;
 case WM_RBUTTONDOWN:
  MessageBox("右","右",MB_OK);
  break;
 default:
  break;
 }

 return 0;
}

BOOL CMainFrame::AddTrayIcon()
{
 HICON hIcon = LoadIcon(_Module.m_hInstResource,MAKEINTRESOURCE

(IDR_MAINFRAME));
 char lpszTip[] = _T("TrayIcon");
 
 NOTIFYICONDATA tnid;
 tnid.cbSize = sizeof(NOTIFYICONDATA);
 tnid.hWnd = m_hWnd;
 tnid.uID = IDR_MAINFRAME;
 tnid.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
 tnid.uCallbackMessage = WM_TRAYICON;
 tnid.hIcon = hIcon;
 lstrcpyn(tnid.szTip,lpszTip,sizeof(tnid.szTip));

 return Shell_NotifyIcon(NIM_ADD,&tnid);
}

BOOL CMainFrame::DeleteTrayIcon()
{
 NOTIFYICONDATA tnid;
 tnid.cbSize = sizeof(NOTIFYICONDATA);
 tnid.hWnd = m_hWnd;
 tnid.uID = IDR_MAINFRAME;

 return Shell_NotifyIcon(NIM_DELETE,&tnid);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值