CreateWindow托盘图标的介绍、使用方法以及案例说明
1. 介绍
在Windows系统中,托盘图标也叫任务栏通知区域图标,可以显示程序的运行状态或者提醒用户进行某些操作。CreateWindow函数可用于创建托盘图标,并对其进行设置。
在使用CreateWindow函数创建托盘图标前,需要先设置一个结构体NOTIFYICONDATA,它包含了托盘图标的一些属性和行为。一般情况下,会设置其图标、提示信息和消息处理函数等。
2. 使用方法
步骤一:初始化NOTIFYICONDATA结构体
```c++
NOTIFYICONDATA nid;
ZeroMemory(&nid, sizeof(nid)); //将结构体中所有成员变量的值设为0
nid.cbSize = sizeof(nid);
nid.hWnd = hWnd;
nid.uID = 0;
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; //设置图标、消息和提示信息
nid.uCallbackMessage = WM_TRAYICON; //设置自定义消息
nid.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON)); //加载图标
lstrcpy(nid.szTip, TEXT("这是一个托盘图标")); //设置提示信息
```
步骤二:将托盘图标添加到系统中
```c++
Shell_NotifyIcon(NIM_ADD, &nid);
```
注意:添加成功后,还需要使用Shell_NotifyIcon函数来指定对托盘图标的操作。
步骤三:处理消息
```c++
case WM_TRAYICON:
switch (lParam)
{
case WM_LBUTTONDOWN:
MessageBox(hWnd, TEXT("点击了左键"), TEXT("操作提示"), MB_OK);
break;
case WM_RBUTTONDOWN:
MessageBox(hWnd, TEXT("点击了右键"), TEXT("操作提示"), MB_OK);
break;
}
break;
```
注意:需要在消息处理函数处理WM_TRAYICON消息。
步骤四:删除托盘图标
```c++
Shell_NotifyIcon(NIM_DELETE, &nid);
```
3. 案例说明
下面是一个完整的CreateWindow托盘图标的案例:
```c++
#include #include #define ID_TRAYICON 100 //定义托盘图标的ID #define WM_TRAYICON (WM_USER + 2017) //定义自定义消息 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //创建窗口 TCHAR szWindowClass[] = TEXT("CreateWindow托盘图标"); WNDCLASSEX wcex; ZeroMemory(&wcex, sizeof(wcex)); wcex.cbSize = sizeof(wcex); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.hInstance = hInstance; wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wcex.lpszClassName = szWindowClass; RegisterClassEx(&wcex); HWND hWnd = CreateWindow(szWindowClass, TEXT("CreateWindow托盘图标"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) return FALSE; //初始化NOTIFYICONDATA结构体 NOTIFYICONDATA nid; ZeroMemory(&nid, sizeof(nid)); nid.cbSize = sizeof(nid); nid.hWnd = hWnd; nid.uID = ID_TRAYICON; nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; nid.uCallbackMessage = WM_TRAYICON; nid.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON)); lstrcpy(nid.szTip, TEXT("这是一个托盘图标")); //将托盘图标添加到系统中 Shell_NotifyIcon(NIM_ADD, &nid); //消息循环 MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } //删除托盘图标 Shell_NotifyIcon(NIM_DELETE, &nid); return (int)msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); EndPaint(hWnd, &ps); } break; case WM_DESTROY: PostQuitMessage(0); break; case WM_TRAYICON: switch (lParam) { case WM_LBUTTONDOWN: MessageBox(hWnd, TEXT("点击了左键"), TEXT("操作提示"), MB_OK); break; case WM_RBUTTONDOWN: MessageBox(hWnd, TEXT("点击了右键"), TEXT("操作提示"), MB_OK); break; } break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } ``` 以上就是CreateWindow托盘图标的介绍、使用方法和案例说明。希望对你有所帮助! 壹涵网络我们是一家专注于网站建设、企业营销、网站关键词排名、AI内容生成、新媒体营销和短视频营销等业务的公司。我们拥有一支优秀的团队,专门致力于为客户提供优质的服务。 我们致力于为客户提供一站式的互联网营销服务,帮助客户在激烈的市场竞争中获得更大的优势和发展机会!
发表评论 取消回复