|
- // 回调函数,处理通知消息
- LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
- {
- switch (msg)
- {
- case WM_CREATE:
- {
- // 创建托盘图标
- NOTIFYICONDATAA nid;
- nid.cbSize = sizeof(NOTIFYICONDATAA);
- nid.hWnd = hwnd;
- nid.uID = 1;
- nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
- nid.uCallbackMessage = WM_USER + 1;
- nid.hIcon = LoadIcon(NULL, IDI_INFORMATION);
- strcpy(nid.szTip, "Notification");
- Shell_NotifyIconA(NIM_ADD, &nid);
- // 设置托盘图标的上下文菜单
- HMENU hMenu = CreatePopupMenu();
- AppendMenuA(hMenu, MF_STRING, 1, "Show Notification");
- AppendMenuA(hMenu, MF_STRING, 2, "Exit");
- SetMenuDefaultItem(hMenu, 1, FALSE);
- SetForegroundWindow(hwnd);
- TrackPopupMenu(hMenu, TPM_LEFTALIGN | TPM_RIGHTBUTTON, 0, 0, 0, hwnd, NULL);
- DestroyMenu(hMenu);
- break;
- }
- case WM_USER + 1:
- {
- // 处理托盘图标的消息
- switch (lParam)
- {
- case WM_LBUTTONUP:
- MessageBoxA(NULL, "This is a notification message.", "Notification", MB_ICONINFORMATION);
- break;
- case WM_RBUTTONUP:
- {
- HMENU hMenu = CreatePopupMenu();
- AppendMenuA(hMenu, MF_STRING, 1, "Show Notification");
- AppendMenuA(hMenu, MF_STRING, 2, "Exit");
- SetMenuDefaultItem(hMenu, 1, FALSE);
- POINT pt;
- GetCursorPos(&pt);
- SetForegroundWindow(hwnd);
- TrackPopupMenu(hMenu, TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwnd, NULL);
- DestroyMenu(hMenu);
- break;
- }
- }
- break;
- }
- case WM_COMMAND:
- // 处理菜单项的点击事件
- switch (LOWORD(wParam))
- {
- case 1:
- MessageBoxA(NULL, "This is a notification message.", "Notification", MB_ICONINFORMATION);
- break;
- case 2:
- DestroyWindow(hwnd);
- break;
- }
- break;
- case WM_DESTROY:
- // 移除托盘图标
- NOTIFYICONDATA nid;
- nid.cbSize = sizeof(NOTIFYICONDATA);
- nid.hWnd = hwnd;
- nid.uID = 1;
- Shell_NotifyIcon(NIM_DELETE, &nid);
- PostQuitMessage(0);
- break;
- default:
- return DefWindowProc(hwnd, msg, wParam, lParam);
- }
- return 0;
- }
- int main()
- {
- HINSTANCE hInstance = 0;
- // 注册窗口类
- WNDCLASSEXA wcex;
- wcex.cbSize = sizeof(WNDCLASSEXA);
- wcex.style = CS_HREDRAW | CS_VREDRAW;
- wcex.lpfnWndProc = WndProc;
- wcex.cbClsExtra = 0;
- wcex.cbWndExtra = 0;
- wcex.hInstance = hInstance;
- wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
- wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
- wcex.lpszMenuName = NULL;
- wcex.lpszClassName = "MyWindowClass";
- wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
- RegisterClassExA(&wcex);
- // 创建窗口
- HWND hwnd = CreateWindowA("MyWindowClass", "Notification Demo", WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hInstance, NULL);
- if (!hwnd)
- return 0;
- // 显示窗口
- ShowWindow(hwnd, SW_SHOW);
- UpdateWindow(hwnd);
- // 消息循环
- MSG msg;
- while (GetMessage(&msg, NULL, 0, 0))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return (int)msg.wParam;
- }
复制代码
|
|