BOOL TrayMessage(HWND hWnd, DWORD dwMessage, HICON hIcon, PSTR pszTip)
{
BOOL bReturn;
NOTIFYICONDATA NofityData;
NofityData.cbSize = sizeof(NOTIFYICONDATA);
NofityData.hWnd = hWnd;
NofityData.uID = IDR_MAINFRAME; //工具栏图标ID
NofityData.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP; //指定哪些项有效
NofityData.uCallbackMessage = WM_MY_TRAY_NOTIFICATION; //程序定义的响应任务栏图标操作的消息
NofityData.hIcon = hIcon; //图标的指针
lstrcpyn(NofityData.szTip, pszTip, sizeof(NofityData.szTip)); //提示信息
bReturn = Shell_NotifyIcon(dwMessage, &NofityData); //朝工具栏区域发送消息
if (hIcon)
DestroyIcon(hIcon);
return bReturn;
}
Parameters:
hWnd: 接收消息的窗口
dwMessage: 工具栏图标的所作的变化。主要有:NIM_ADD,NIM_DELETE,NIM_MODIFY,NIM_SETFOCUS等对图标动作的定义。
hIcon: 指定工具栏图标
pszTip:提示消息
通过上面的函数我们就可以随意的处理工具栏的图标操作了。
如想添加图标:
TrayMessage(m_hWnd, NIM_ADD, NULL, "测试程序");
TrayMessage(m_hWnd, NIM_MODIFY, m_hIcon, "测试程序");
想删除图标:
TrayMessage(m_hWnd, NIM_DELETE, NULL, "");
如果要处理图标的消息,需要添上如下消息映射:
BEGIN_MESSAGE_MAP(...)
ON_MESSAGE(WM_MY_TRAY_NOTIFICATION,OnTrayNotification)
END_MESSAGE_MAP()
在程序中的消息处理函数如下处理:
LRESULT CTest::OnTrayNotification(WPARAM wparam, LPARAM lparam)
{
switch (lparam )
{
case WM_RBUTTONUP://如果右键点击释放
//do something
break;
case WM_LBUTTONDBLCLK://如果鼠标左键双击
//do something
break;
}
return 0;
}