分析:

利用GetSystemMetrics函数获取设备尺寸:

  1. GetSystemMetrics(SM_CXSCREEN)返回设备宽度(px)

  2. GetSystemMetrics(SM_CYSCREEN);返回设备高度(px)

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
#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;
static int cxClient, cyClient;
TCHAR szBuffer[128];

switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
cxClient = GetSystemMetrics(SM_CXSCREEN);
cyClient = GetSystemMetrics(SM_CYSCREEN);
StringCchPrintf(szBuffer, 128, TEXT("当前显示器的分辨率是: %d * %d px"), cxClient, cyClient);
DrawText(hdc, szBuffer, -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);
}