转自 http://www.cnblogs.com/lidabo/archive/2012/07/10/2584725.html

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

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

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

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

第二步:用TextOut输出分辨率

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

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

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

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

  1. TextOut(hdc, 0, 0, szBuffer, iLength);

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

获取窗体显示区域大小

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

第一种方法:使用GetSystemMetrics函数

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

第二种方法:使用GetClientRect函数

该函数的原型如下:

  1. BOOL GetClientRect(
  2. HWND hWnd,      // handle to window
  3. LPRECT lpRect   // client coordinates
  4. );

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

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

第三种方法:LOWORD和HIWORD宏

  1. case WM_SIZE:
  2. x = LOWORD(lParam);
  3. 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. GetSystemMetrics() 函数的用法

    可以用GetSystemMetrics函数可以获取系统分辨率,但这只是其功能之一,GetSystemMetrics函数只有一个参数,称之为「索引」,这个索引有75个标识符,通过设置不同的标识符就可以获 ...

  2. 有关日期的函数操作用法总结,to_date(),trunc(),add_months();

    相关知识链接: Oracle trunc()函数的用法 oracle add_months函数 Oracle日期格式转换,tochar(),todate() №2:取得当前日期是一个星期中的第几天,注 ...

  3. Oracle to_date()函数的用法

    Oracle to_date()函数的用法 to_date()是Oracle数据库函数的代表函数之一,下文对Oracle to_date()函数的几种用法作了详细的介绍说明,供您参考学习. 在Orac ...

  4. js中bind、call、apply函数的用法

    最近一直在用 js 写游戏服务器,我也接触 js 时间不长,大学的时候用 js 做过一个 H3C 的 web的项目,然后在腾讯实习的时候用 js 写过一些奇怪的程序,自己也用 js 写过几个的网站.但 ...

  5. Oracle trunc()函数的用法

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

  6. freemarker内置函数和用法

    原文链接:http://www.iteye.com/topic/908500 在我们应用Freemarker 过程中,经常会操作例如字符串,数字,集合等,却不清楚Freemrker 有没有类似于Jav ...

  7. matlab中patch函数的用法

    http://blog.sina.com.cn/s/blog_707b64550100z1nz.html matlab中patch函数的用法——emily (2011-11-18 17:20:33) ...

  8. JavaScript中常见的数组操作函数及用法

    JavaScript中常见的数组操作函数及用法 昨天写了个帖子,汇总了下常见的JavaScript中的字符串操作函数及用法.今天正好有时间,也去把JavaScript中常见的数组操作函数及用法总结一下 ...

  9. JavaScript中常见的字符串操作函数及用法

    JavaScript中常见的字符串操作函数及用法 最近几次参加前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等.如果你经常参加笔试或者也是一个过来人,相信 ...

随机推荐

  1. git必会必知

    1 前言 git前身是BitKeeper,但是他不是开源软件,不符合当时开源趋势,于是就会有了开源的git,git开发只用了十天时间.目前git是公司开发必不可少的一个工具,用于多人开发的分布式版本控 ...

  2. cssText用法和使用说明

    cssText 本质是什么? cssText 的本质就是设置 HTML 元素的 style 属性值. cssText 怎么用? document.getElementById("d1&quo ...

  3. google搜索使用技巧

    1.输入框所有空格都被理解为加号2.搜索多个单词时,需要加上引号,会当字符串处理3.使用-(减号)剔除指定条件,如:'mongdb'-'nodejs'4.可以使用通配符,如'vue *'5.在指定网站 ...

  4. jQuery无刷新上传之uploadify

    引自 文章 http://www.cnblogs.com/babycool/archive/2012/08/04/2623137.html 将文章里的代码整合在了一个解决方案里,直接可以下载测试,上代 ...

  5. JSP / JDK和Apache的配置

    系统环境:Windows7 x64 Ultimate chs 1.首先安装jdk,可以再oracle官网下载到,此处安装jdk6.0版本. 2.配置jdk环境变量: 我的电脑-->属性--> ...

  6. TE7下的创建组件AxHost失败

    问题比较诡异.时好时坏的.网上的办法试过了,没用. 最后的解决办法是,把项目属性切换到Any CPU,然后勾选 32位优先,切换到界面设计状态,拖放控件,OK:运行,会出现红色提示:再次切换到项目属性 ...

  7. c++中%是什么意思?

    两种意思:1.格式化字符串输出2.整数取余 1.目前printf支持以下格式的输出,例如:printf("%c",a):输出单个字符.printf("%d",a ...

  8. JavaScript Event 事件 事件流 事件对象 事件处理程序 回调函数 error和try...catch和throw

    参考资料: 慕课网 DOM事件探秘    js事件对象 处理 事件驱动: JS是采用事件驱动的机制来响应用户操作的,也就是说当用户对某个html元素进行操作的时候,会产生一个事件,该事件会驱动某些函数 ...

  9. Jmeter参数化设置,多用户登录

    一.模拟多用户登录场景 如登录模式如下图所示,登录界面中需要输入:用户名.密码.验证码 用户名以及密码均是固定值,不需要做处理.验证码需要处理一下,可以后台配置成固定值,具体可以找开发咨询. 在此场景 ...

  10. Mysql 优化配置2

    服务器物理硬件的优化 来源社区,个人作为收集 在挑选硬件服务器时,我们应该从下面几个方面着重对MySQL服务器的硬件配置进行优化,也就是说将项目中的资金着重投入到如下几处: 1.磁盘寻道能力(磁盘I/ ...