分析:窗口框架直接搬过来,修改回调函数WndProc,利用WM_MOUSEMOVE消息中的lParam参数获取实时鼠标位置并输出在左上角

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <windows.h>
#include <strsafe.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR CmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT("MyWindows"); // 注意使用TEXT包裹语句
HWND hwnd; // 窗口句柄
MSG msg; // 消息结构
WNDCLASS wndclass; // 窗口类, 定义窗口基本属性
wndclass.style = CS_HREDRAW | CS_VREDRAW; // CS->ClassStyle, H->horizontal 水平的, V->vertical 垂直的, redraw 重绘
wndclass.lpfnWndProc = WndProc; // 指定窗口过程(回调函数)
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0; // 预留的额外空间, 一般设为0
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); // 设定图标
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); // 设定光标
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // 窗口背景色
wndclass.lpszMenuName = NULL; // 菜单名字
wndclass.lpszClassName = szAppName; // 窗口类名

if (!RegisterClass(&wndclass)) // 注册窗口, 注册成功返回ATOM类型(对应了字符串在ATOM表的位置); 注册失败返回0
{
MessageBox(NULL, TEXT("这个程序需要在Windows NT才能执行!"), szAppName, MB_ICONERROR);
}

hwnd = CreateWindow(szAppName,
TEXT("快乐小凳凳"),
WS_OVERLAPPEDWINDOW, // 窗口风格
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);

ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;

switch (message)
{
case WM_MOUSEMOVE:
int x = LOWORD(lParam);
int y = HIWORD(lParam);
// 在WM_MOUSEMOVE消息中lParam的高16位为鼠标纵坐标,低16位为鼠标横坐标
wchar_t str[100];
StringCchPrintf(str, 100, TEXT("当前鼠标位置: (%d, %d)"), x, y);
SetWindowText(hwnd, str);
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
DrawText(hdc, TEXT("当前鼠标位置请看左上角^_^"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0); // 正式关闭窗口
return 0;
}

return DefWindowProc(hwnd, message, wParam, lParam);
}