CreateWindow托盘图标

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内容生成、新媒体营销和短视频营销等业务的公司。我们拥有一支优秀的团队,专门致力于为客户提供优质的服务。

我们致力于为客户提供一站式的互联网营销服务,帮助客户在激烈的市场竞争中获得更大的优势和发展机会!

点赞(49) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部