在Windows平台的C++开发场景中,获取屏幕分辨率和窗口大小是很多功能的前置需求,比如界面布局适配、全屏功能实现、窗口位置计算等,都依赖这两个数据的准确获取。Windows系统提供了一系列原生的API接口,开发者可以直接调用这些接口快速完成相关功能,不需要引入第三方库。

核心Windows API介绍
实现获取屏幕分辨率和窗口大小的功能,主要用到两个核心API,下面分别介绍其作用和参数:
1. GetSystemMetrics函数
该函数用于获取系统的各项度量信息,包括屏幕宽度、屏幕高度、窗口边框大小等。函数原型如下:
// 函数原型 int GetSystemMetrics( int nIndex // 指定要获取的度量信息的索引值 );
获取屏幕分辨率时,常用的两个索引值如下:
- SM_CXSCREEN:表示屏幕的宽度,单位为像素
- SM_CYSCREEN:表示屏幕的高度,单位为像素
2. GetWindowRect函数
该函数用于获取指定窗口的边框矩形的尺寸,包含窗口的标题栏、边框等所有部分。函数原型如下:
// 函数原型 BOOL GetWindowRect( HWND hWnd, // 目标窗口的句柄 LPRECT lpRect // 指向RECT结构的指针,用于接收窗口的矩形坐标 );
RECT结构包含四个成员,分别是left、top、right、bottom,窗口的宽度为right - left,高度为bottom - top。
获取屏幕分辨率实战代码
下面是调用GetSystemMetrics函数获取屏幕分辨率的完整示例代码,需要包含Windows.h头文件:
#include <iostream>
#include <Windows.h>
int main() {
// 获取屏幕宽度
int screenWidth = GetSystemMetrics(SM_CXSCREEN);
// 获取屏幕高度
int screenHeight = GetSystemMetrics(SM_CYSCREEN);
std::cout << "屏幕分辨率:" << screenWidth << "x" << screenHeight << std::endl;
system("pause");
return 0;
}
代码运行后,会在控制台输出当前屏幕的横向和纵向像素数,比如常见的1920x1080分辨率就会输出对应数值。
获取指定窗口大小实战代码
获取窗口大小需要先获取目标窗口的句柄,这里以当前控制台窗口为例,演示如何获取其尺寸:
#include <iostream>
#include <Windows.h>
int main() {
// 获取当前控制台窗口的句柄
HWND hwnd = GetConsoleWindow();
RECT windowRect;
// 获取窗口矩形信息
if (GetWindowRect(hwnd, &windowRect)) {
int windowWidth = windowRect.right - windowRect.left;
int windowHeight = windowRect.bottom - windowRect.top;
std::cout << "窗口宽度:" << windowWidth << "像素" << std::endl;
std::cout << "窗口高度:" << windowHeight << "像素" << std::endl;
} else {
std::cout << "获取窗口信息失败" << std::endl;
}
system("pause");
return 0;
}
如果需要获取其他窗口的大小,可以通过FindWindow函数传入窗口类名或者窗口标题获取对应窗口的句柄,再调用GetWindowRect即可。
注意事项
- 调用Windows API需要包含Windows.h头文件,编译时如果是使用MinGW等编译器,需要确保链接了对应的系统库,一般默认会自动链接
- GetWindowRect获取的是窗口在屏幕坐标系中的位置,坐标原点为屏幕左上角
- 如果获取的是DPI缩放后的窗口尺寸,可能需要结合DPI相关API做适配,避免高DPI屏幕下获取的尺寸和实际显示不符
C++Windows_APIGetSystemMetricsGetWindowRect屏幕分辨率修改时间:2026-06-30 17:45:30