详细介绍GetSystemMetrics()

书籍:《Visual C++ 2017从入门到精通》的2.5键盘

环境:visual studio 2022

内容:【例2.43】通过字符消息显示用户按键的字符

说明:以下内容大部分来自腾讯元宝。

GetSystemMetrics() 是 Windows API 中用于获取系统度量或配置设置的函数,其核心功能是通过索引值 nIndex 检索系统参数,所有返回值均以像素为单位。以下是详细说明:


1. 函数功能与参数

  • 功能
    检索系统显示元素(如窗口边框、光标尺寸、屏幕分辨率等)或系统配置(如启动模式、多显示器支持等)的参数。
  • 参数
    • nIndex(整型):指定要检索的系统参数,分为两类:
      • SM_CX* 系列:表示宽度(如 SM_CXSCREEN 表示屏幕宽度)。
      • SM_CY* 系列:表示高度(如 SM_CYSCREEN 表示屏幕高度)。
      • 布尔型参数:返回非零值表示 TRUE,零表示 FALSE(如 SM_DBCSENABLED 表示是否启用双字节字符支持)。

2. 常用系统参数说明

以下是部分常用参数及其含义:

参数名称含义示例值(Windows 10)
SM_CXSCREEN屏幕宽度(像素)1920
SM_CYSCREEN屏幕高度(像素)1080
SM_CXMAXIMIZED最大化窗口的默认宽度(像素)1600
SM_CYMAXIMIZED最大化窗口的默认高度(像素)900
SM_CXBORDER窗口边框宽度(3D 窗口时等同于 SM_CXEDGE4
SM_CXCURSOR光标宽度(像素,标准箭头为 32x32)32
SM_CONVERTIBLESLATEMODE平板模式状态(0 表示 Slate 模式,非零表示桌面模式)0
SM_CLEANBOOT系统启动方式(0:正常启动,1:安全模式,2:网络安全模式)0

3. 典型应用场景

  1. 获取屏幕分辨率

    int cxScreen = GetSystemMetrics(SM_CXSCREEN);
    int cyScreen = GetSystemMetrics(SM_CYSCREEN);

    此方法适用于跨平台兼容性要求不高的场景。

  2. 计算窗口布局
    通过 SM_CXDLGFRAME(对话框边框厚度)和 SM_CYCAPTION(标题栏高度)动态调整控件位置。

  3. 检测系统配置
    判断是否支持触摸屏(SM_MAXIMUMTOUCHES)或双字节字符(SM_DBCSENABLED)。


4. 注意事项

  • 分辨率适配
    SM_CXSCREEN 和 SM_CYSCREEN 返回的是物理分辨率,若需逻辑分辨率(如 DPI 缩放),需结合 GetDpiForWindow 函数。
  • 多显示器支持
    SM_CMONITORS 返回显示器数量,结合 EnumDisplayMonitors 可遍历所有显示器。
  • 动态参数变化
    若系统配置(如电源模式、多显示器布局)改变,需通过 WM_SETTINGCHANGE 消息重新获取参数。

5. 示例代码

#include <windows.h>
#include <iostream>

int main() {
    int cxScreen = GetSystemMetrics(SM_CXSCREEN);
    int cyScreen = GetSystemMetrics(SM_CYSCREEN);
    std::cout << "Screen Resolution: " << cxScreen << "x" << cyScreen << std::endl;

    int cxBorder = GetSystemMetrics(SM_CXBORDER);
    std::cout << "Window Border Width: " << cxBorder << " pixels" << std::endl;

    return 0;
}

通过合理使用 GetSystemMetrics(),开发者可以实现更灵活的界面适配和系统信息获取。如需完整参数列表,可参考微软官方网页或 CSDN 博客。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值