以下是一个使用 Shell_NotifyIcon 的示例,用于设置系统托盘图标,并从指定路径加载图标文件。
#include <windows.h>
// 函数声明
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int main()
{
// 创建窗口
HWND hwnd;
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WindowProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
"NotificationWindow", NULL };
RegisterClassEx(&wc);
hwnd = CreateWindow(wc.lpszClassName, "Notification Window",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, 500, 500,
NULL, NULL, wc.hInstance, NULL);
// 设置系统托盘图标
NOTIFYICONDATA nid = { sizeof(NOTIFYICONDATA) };
nid.hWnd = hwnd;
nid.uID = 1; // 托盘图标唯一ID
nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
nid.uCallbackMessage = WM_USER + 1; // 回调消息
// 加载图标文件并设置为托盘图标
HICON hIcon = (HICON)LoadImage(NULL,"C:\\Path\\To\\Icon.ico", IMAGE_ICON,
GetSystemMetrics(SM_CXSMICON),
GetSystemMetrics(SM_CYSMICON),
LR_LOADFROMFILE | LR_DEFAULTSIZE | LR_SHARED);
if (hIcon)
nid.hIcon = hIcon;
strcpy(nid.szTip,"Tooltip Text"); // 鼠标悬停时的提示文本
Shell_NotifyIcon(NIM_ADD, &nid); // 将图标添加到系统托盘
// 消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// 清理并移除托盘图标
Shell_NotifyIcon(NIM_DELETE, &nid);
DestroyWindow(hwnd);
return 0;
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg,
WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_DESTROY)
{
PostQuitMessage(0);
return 0;
}
if (uMsg == WM_USER + 1) // 自定义回调消息处理
{
// 处理自定义操作,例如点击托盘图标时的行为
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
上述代码中,你需要将 C:\\Path\\To\\Icon.ico
替换为具体的图标文件路径。此示例会创建一个窗口,并将指定路径下的图标文件设置为系统托盘图标。你可以根据需要在 WindowProc
函数中添加自定义行为和响应。
内容由零声教学AI助手提供,问题来源于学员提问