帮我写一段C++代码,实现鼠标经过的位置会留下系统图标
时间: 2024-02-13 09:05:08 浏览: 78
以下是一个简单的C++代码示例,可以在鼠标经过的位置留下系统图标:
```c++
#include <windows.h>
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// 注册窗口类
WNDCLASS wc = {};
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = "MyWindowClass";
RegisterClass(&wc);
// 创建窗口
HWND hwnd = CreateWindowEx(
0,
"MyWindowClass",
"My Window",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
// 显示窗口
ShowWindow(hwnd, nCmdShow);
// 消息循环
MSG msg = {};
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_MOUSEMOVE:
{
// 获取鼠标位置
int x = GET_X_LPARAM(lParam);
int y = GET_Y_LPARAM(lParam);
// 绘制系统图标
HDC hdc = GetDC(hwnd);
HICON hIcon = LoadIcon(NULL, IDI_APPLICATION);
DrawIcon(hdc, x, y, hIcon);
ReleaseDC(hwnd, hdc);
return 0;
}
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
}
```
这个代码创建了一个窗口,并在鼠标经过的位置绘制了系统图标。具体来说,当鼠标移动时,窗口会收到WM_MOUSEMOVE消息,我们在处理这个消息时获取鼠标位置,然后使用DrawIcon函数绘制系统图标。当窗口关闭时,程序会通过PostQuitMessage函数退出消息循环,结束程序的运行。
阅读全文