可以用GetSystemMetrics函数可以获取系统分辨率,但这只是其功能之一,GetSystemMetrics函数只有一个参数,称之为「索引」,这个索引有75个标识符,通过设置不同的标识符就可以获取系统分辨率、窗体显示区域的宽度和高度、滚动条的宽度和高度。

为了使使GetSystemMetrics的功能,我们以获取系统分辨率为例,并将其中的两个值用TextOut输出到窗体中。

第一步:用GetSystemMetrics获取屏幕的宽度和高度

int x, y;
x = GetSystemMetrics(SM_CXSCREEN); //屏幕宽度
y = GetSystemMetrics(SM_CYSCREEN); //屏幕高度

第二步:用TextOut输出分辨率

因为x和y的值是int类型,所以无法用TextOut直接输出,需要借助wsprintf函数,在C中,可以用printf函数直接将字符串输出到屏幕上,但wsprintf是将字符串输出到一个char字符数组中,而且wsprintf会返回输出字符串的长度。

TCHAR szBuffer[10];
int x = 1024;
int y = 768;
int iLength;
iLength = wsprintf(szBuffer, TEXT("%5d"), x);

小提示:szBuffer数组的长度一定要大于x的长度,否则不能输出。

以上这段代码,是用wsprintf将x的值存入szBuffer中,然后在iLength中存放x的长度。这一步实际上解决了两个问题,将int类型的屏幕宽度转为了TCHAR类型,TextOut函数可以直接输出TCHAR类型字符串,而且获取了字符串的长度,那么我们就可以用TextOut函数在窗体中输出屏幕的宽度:

TextOut(hdc, 0, 0, szBuffer, iLength);
本文的重点是GetSystemMetrics函数,该函数的75个索引标识符我没一个一个的试,反正只要知道这个函数的作用就行了。在本文中wsprintf函数是解决int转string的问题,本来想直接在TextOut中使用IntToStr函数来输出int类型的值,但没弄清IntToStr函数在哪个头文件中,总用不上。IntToStr函数我以前用过,在C++中应该有这个函数的。

获取窗体显示区域大小

已我现在的了解,获取窗体显示区域大小有三种方法。

第一种方法:使用GetSystemMetrics函数

GetSystemMetrics(SM_CXFULLSCREEN); //获取最大化窗体的显示区域宽度
GetSystemMetrics(SM_CYFULLSCREEN); //获取最大化窗体的显示区域高度

第二种方法:使用GetClientRect函数

该函数的原型如下:

BOOL GetClientRect(HWND hWnd,      // handle to windowLPRECT lpRect   // client coordinates
);

书上没介绍该函数的使用方法,看MSDN的示例代码,经过测试,其使用方法如下:

RECT rect;
hdc = BeginPaint (hwnd, &ps) ;
GetClientRect(hwnd, &rect);
x = rect.right;
y = rect.bottom;
SetTextAlign(hdc, TA_RIGHT | TA_TOP);
TextOut(hdc, 100, 0, szBuffer, wsprintf(szBuffer,TEXT("%5d"), x));
TextOut(hdc, 100, cyChar,szBuffer, wsprintf(szBuffer, TEXT("%5d"), y));
EndPaint (hwnd, &ps) ;

第三种方法:LOWORD和HIWORD宏

case WM_SIZE:x = LOWORD(lParam);y = HIWORD(lParam);

下面是GetSystemMetrics函数参数nIndex的定义:

SM_ARRANGE //返回是否预备最小化.
SM_CLEANBOOT //返回系统启动方式://0 正常启动//1 安全模式启动//2 网络安全模式启动
SM_CMOUSEBUTTONS //返回值为系统支持的鼠标键数,返回0,则系统中没有安装鼠标。
SM_CXBORDER,SM_CYBORDER //返回以相素值为单位的Windows窗口边框的宽度和高度,如果Windows的为3D形态,则等同于SM_CXEDGE参数
SM_CXCURSOR,SM_CYCURSOR //返回以相素值为单位的标准光标的宽度和高度
SM_CXDLGFRAME,SM_CYDLGFRAME //等同与SM_CXFIXEDFRAME and SM_CYFIXEDFRAME
SM_CXDOUBLECLK,SM_CYDOUBLECLK //以相素值为单位的双击有效的矩形区域
SM_CXEDGE,SM_CYEDGE //以相素值为单位的3D边框的宽度和高度
SM_CXFIXEDFRAME,SM_CYFIXEDFRAME //围绕具有标题但无法改变尺寸的窗口(通常是一些对话框)的边框的厚度
SM_CXFRAME,SM_CYFRAME //等同于SM_CXSIZEFRAME and SM_CYSIZEFRAME
SM_CXFULLSCREEN,SM_CYFULLSCREEN //全屏幕窗口的窗口区域的宽度和高度
SM_CXHSCROLL,SM_CYHSCROLL //水平滚动条的高度和水平滚动条上箭头的宽度
SM_CXHTHUMB //以相素为单位的水平滚动条上的滑动块宽度
SM_CXICON,SM_CYICON //系统缺省的图标的高度和宽度(一般为32*32)
SM_CXICONSPACING,SM_CYICONSPACING //以大图标方式查看Item时图标之间的间距,这个距离总是大于等于
SM_CXICON and SM_CYICON.
SM_CXMAXIMIZED,SM_CYMAXIMIZED //处于顶层的最大化窗口的缺省尺寸
SM_CXMAXTRACK,SM_CYMAXTRACK //具有可改变尺寸边框和标题栏的窗口的缺省最大尺寸,如果窗口大于这个尺寸,窗口是不可移动的。
SM_CXMENUCHECK,SM_CYMENUCHECK //以相素为单位计算的菜单选中标记位图的尺寸
SM_CXMENUSIZE,SM_CYMENUSIZE //以相素计算的菜单栏按钮的尺寸
SM_CXMIN,SM_CYMIN //窗口所能达到的最小尺寸
SM_CXMINIMIZED,SM_CYMINIMIZED //正常的最小化窗口的尺寸
SM_CXMINTRACK,SM_CYMINTRACK //最小跟踪距离,当使用者拖动窗口移动距离小于这个值,窗口不会移动。
SM_CXSCREEN,SM_CYSCREEN //以相素为单位计算的屏幕尺寸。
SM_CXSIZE,SM_CYSIZE //以相素计算的标题栏按钮的尺寸
SM_CXSIZEFRAME,SM_CYSIZEFRAME //围绕可改变大小的窗口的边框的厚度
SM_CXSMICON,SM_CYSMICON //以相素计算的小图标的尺寸,小图标一般出现在窗口标题栏上。
M_CXVSCROLL,SM_CYVSCROLL //以相素计算的垂直滚动条的宽度和垂直滚动条上箭头的高度
SM_CYCAPTION //以相素计算的普通窗口标题的高度
SM_CYMENU //以相素计算的单个菜单条的高度
SM_CYSMCAPTION //以相素计算的窗口小标题栏的高度
SM_CYVTHUMB //以相素计算的垂直滚动条中滚动块的高度
SM_DBCSENABLED //如果为TRUE或不为0的值表明系统安装了双字节版本的USER.EXE,为FALSE或0则不是。
SM_DEBUG //如果为TRUE或不为0的值表明系统安装了debug版本的USER.EXE,为FALSE或0则不是。
SM_MENUDROPALIGNMENT //如果为TRUE或不为0的值下拉菜单是右对齐的否则是左对齐的。
SM_MOUSEPRESENT //如果为TRUE或不为0的值则安装了鼠标,否则没有安装。
SM_MOUSEWHEELPRESENT //如果为TRUE或不为0的值则安装了滚轮鼠标,否则没有安装。(Windows NT only)
SM_SWAPBUTTON //如果为TRUE或不为0的值则鼠标左右键交换,否则没有。

GetSystemMetrics()函数的用法相关推荐

  1. 关于C语言中的malloc和free函数的用法

    一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...

  2. Python assert断言函数及用法

    Python assert断言函数及用法 Python assert 语句,又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行:反之,Pyt ...

  3. python中的counter()、elements()、most_common()和subtract()函数的用法

    python中的counter().elements().most_common()和subtract()函数的用法 counter()方法: class collections.Counter([i ...

  4. Java正则表达式--Matcher.group函数的用法

    https://www.cnblogs.com/jiafuwei/p/6080984.html Java正则表达式--Matcher.group函数的用法 原来,group是针对()来说的,group ...

  5. MapInfo中常用查询函数及用法

    MapInfo中常用查询函数及用法: 函数用途 语法 备注 图层中选点 Str$(obj)="point": Str(String)表示字符串:point表示点: 图层中选线 St ...

  6. Oracle trunc()函数的用法

    --Oracle trunc()函数的用法 /**************日期********************/ 1.select trunc(sysdate) from dual  --20 ...

  7. php error log 函数,php日志函数error_log如何使用 php日志函数error_log用法介绍

    php日志函数error_log如何使用?这篇文章主要介绍了php日志函数error_log用法,结合实例形式分析了php日志函数error_log相关的配置文件设置.函数功能.用法与使用注意事项,需 ...

  8. Python中的map()函数和reduce()函数的用法

    Python中的map()函数和reduce()函数的用法 这篇文章主要介绍了Python中的map()函数和reduce()函数的用法,代码基于Python2.x版本,需要的朋友可以参考下  

  9. php函数find的用法,c语言find函数的用法详解

    c语言find函数的用法详解 C语言之find()函数 find函数用于查找数组中的某一个指定元素的位置. 比如:有一个数组[0, 0, 5, 4, 4]: 问:元素5的在什么位置,find函数 返回 ...

最新文章

  1. php环境搭建 warmp_PHP环境搭建
  2. 升级TortoiseSVN-1.9.0.26652-x64-svn-1.9.0导致错误提示
  3. 对 jiffies 溢出、回绕及 time_after 宏的理解
  4. java语言 文件上传,java中实现文件上传的方法
  5. 【Java】使用Java调用Python的四种方法
  6. Docker Compose部署项目到容器-基于Tomcat和mysql的商城项目(附源码和sql下载)
  7. 《架构之美》阅读笔记四
  8. Windows平台RTMP直播推送集成简要说明
  9. Qt线程和signal-slot
  10. HDU1166树状数组
  11. Pycharm使用---Black代码格式化工具
  12. base64原理及其编解码的python实现
  13. Mac技巧1: 精确倍速QuickTime Player 播放器
  14. 如何根据DBC计算CAN与CANFD的负载率
  15. 微软Win11与万物互联时代新系统需求更加迫切
  16. Html提交表单的制作
  17. 倾斜摄影在农房一体不动产测量中的技术流程(Smart3D+EPS)
  18. 奇技淫巧之 dummy 网卡
  19. 分享电脑日常使用的小技巧
  20. Ai智能语音机器人系统搭建和私有云部署

热门文章

  1. Python成长之路第一篇(4)_if,for,while条件语句
  2. 在LINUX终端和VIM下复制粘贴
  3. Meizu M8 Preview
  4. 基于Springboot实现园区招商管理系统
  5. TCGA的样本命名规则
  6. python投资组合
  7. 鹅厂2020暑期实习第三次一面
  8. JDBC与Druid简单介绍及Druid与MyBatis连接数据库
  9. C# 访问并打开局域网文件夹
  10. 远震波形射线计算的局限性