我已经在任务栏中设置了一个图标代码,但是当有人右键/左键点击它时我无法做到。有没有办法做到这一点?
//Notification
NOTIFYICONDATA nid = {};
nid.hWnd = hwnd;
nid.cbSize = sizeof(nid);
nid.uFlags = NIF_ICON | NIF_TIP | NIF_GUID;
// Note: This is an example GUID only and should not be used.
// Normally, you should use a GUID-generating tool to provide the value to
// assign to guidItem.
HICON hIcon = static_cast<HICON>(LoadImage(NULL,
TEXT("gui\\sample.ico"),
IMAGE_ICON,
0, 0,
LR_DEFAULTCOLOR | LR_SHARED | LR_DEFAULTSIZE | LR_LOADFROMFILE));
static const GUID myGUID =
{ 0x23977b55, 0x10e0, 0x4041,{ 0xb8, 0x62, 0xb1, 0x95, 0x41, 0x96, 0x36, 0x68 } };
nid.guidItem = myGUID;
nid.hIcon = hIcon;
// This text will be shown as the icon's tooltip.
StringCchCopy(nid.szTip, ARRAYSIZE(nid.szTip), title);
SendMessage(nid.hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
SendMessage(nid.hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);
//TaskBar
// Show the notification.
Shell_NotifyIcon(NIM_ADD, &nid) ? S_OK : E_FAIL;
有人可以帮我吗?感谢
答案 0 :(得分:5)
MSDN的Shell_NotifyIcon()
文档
NIF_MESSAGE(0x00000001)
uCallbackMessage
成员有效
<强> uCallbackMessage 强>
输入:UINT应用程序定义的消息标识符。系统使用此标识符将通知消息发送到
hWnd
中标识的窗口。当鼠标事件或悬停发生在图标的边界矩形中,使用键盘选择或激活图标时,或者在气球通知中发生这些操作时,会发送这些通知消息。当
uVersion
成员为0或NOTIFYICON_VERSION时,消息的wParam
参数包含发生事件的任务栏图标的标识符。该标识符的长度可以是32位。lParam
参数保存与事件关联的鼠标或键盘消息。例如,当指针移过任务栏图标时,lParam
设置为WM_MOUSEMOVE。当
uVersion
成员为NOTIFYICON_VERSION_4时,应用程序继续通过uCallbackMessage
成员以应用程序定义的消息的形式接收通知事件,但lParam
和{{的解释1}}该消息的参数更改如下:
wParam
包含通知事件,例如NIN_BALLOONSHOW,NIN_POPUPOPEN或WM_CONTEXTMENU。
LOWORD(lParam)
包含图标ID。图标ID的长度限制为16位。
HIWORD(lParam)
返回通知事件NIN_POPUPOPEN,NIN_SELECT,NIN_KEYSELECT以及WM_MOUSEFIRST和WM_MOUSELAST之间的所有鼠标消息的X锚点坐标。如果键盘生成了任何这些消息,则GET_X_LPARAM(wParam)
将设置为目标图标的左上角。对于所有其他消息,wParam
未定义。
wParam
返回为X锚点定义的通知事件和消息的Y锚点坐标。
添加通知图标时,您需要:
指定将从图标接收通知的GET_Y_LPARAM(wParam)
。
指定hWnd
或nID
以识别图标。如果您使用guidItem
并显示多个图标,则通知将无法告诉您哪个图标正在通知您,因此您必须为每个图标使用单独的HWND。此外,guidItem
实际上在功能上比guidItem
更具限制性,并且导致的问题多于它解决的问题,所以我强烈建议完全远离nID
并始终仅使用guidItem
启用nID
标记,并提供自定义NIF_MESSAGE
消息ID。
每当用户与图标交互时,HWND的窗口过程将接收消息ID。消息的uCallbackMessage
和WPARAM
值将描述操作。
例如:
LPARAM