函数功能:
GetSystemMetrics 函数返回 Windows 中各种图形项(图标、鼠标指针、标题栏和滚动条等)的尺寸信息。
在不同的显卡和驱动中,这些尺寸是不一样的,为了在程序中做到与设备无关的图形输出,GetSystemMetrics 是一个很重要的函数。
注意:GetSystemMetrics 函数获取的所有尺寸均以像素为单位。
API 函数原型:
注释:_In_ 说明该参数是输入的,_opt_ 说明该参数是可选参数。
int WINAPI GetSystemMetrics( _In_ int nIndex );
参数解析:
|
参数 |
含义 |
|
nIndex |
该参数是一个索引值,函数返回该索引值对应的配置信息 |
nIndex 参数是一个索引值,可以是以下列表中任意一个:
注意:
- 所有 SM_CX* 开头表示宽(横向),SM_CY* 开头表示高(纵向)
- 如果是返回布尔类型的数据,用非 0 值表示 TRUE,用 0 表示 FALSE
注释:括号内代表宏的值
|
索引值 |
含义 |
|
SM_ARRANGE(56) |
指定系统如何排列最小化窗口 |
|
SM_CLEANBOOT(67) |
指定系统如何启动: |
|
SM_CMONITORS(80) |
有多少个显示器 |
|
SM_CMOUSEBUTTONS(43) |
鼠标上有多少个按钮,如果为 0 则没有安装鼠标 |
|
SM_CONVERTIBLESLATEMODE(0x2003) |
笔记本电脑或平板模式,0 为平板模式,非 0 表示其他模式 |
|
SM_CXBORDER(5) |
1. 一个窗口边框的宽 |
|
SM_CXCURSOR(13) |
1. 光标的宽 |
|
SM_CXDLGFRAME(7) |
这个值与 SM_CXFIXEDFRAME 是相同的 |
|
SM_CXDOUBLECLK(36) |
双击有效的矩形区域的宽度 |
|
SM_CXDRAG(68) |
鼠标在某个矩形内单击移动被认为是拖拽 |
|
SM_CXEDGE(45) |
3-D 边框的宽度 |
|
SM_CXFIXEDFRAME(7) |
1. 具有标题栏但不可以调整大小的窗口边框的宽度 |
|
SM_CXFOCUSBORDER(83) |
1. DrawFocusRect 函数画出的矩形左右边框的宽度 |
|
SM_CXFRAME(32) |
这个值等同于 SM_CXSIZEFRAME |
|
SM_CXFULLSCREEN(16) |
客户区在全屏模式下的宽度 |
|
SM_CXHSCROLL(21) |
水平滚动条上箭头位图的宽度 |
|
SM_CXHTHUMB(10) |
水平滚动条滑块的宽度 |
|
SM_CXICON(11) |
1. 图标的默认宽度 |
|
SM_CXICONSPACING(38) |
一个网格单元的大图标视图中项的宽度 |
|
SM_CXMAXIMIZED(61) |
最大化顶级窗口的宽度 |
|
SM_CXMAXTRACK(59) |
一个具有标题栏及可调整大小的窗口所能达到的最大宽度 |
|
SM_CXMENUCHECK(71) |
菜单上位图的宽度 |
|
SM_CXMENUSIZE(54) |
菜单条按钮的宽度 |
|
SM_CXMIN(28) |
窗口的最小宽度 |
|
SM_CXMINIMIZED(57) |
最小化窗口的宽度 |
|
SM_CXMINSPACING(47) |
各个最小化窗体所占的矩形的宽度,该值需要大于等于 SM_CXMINIMIZED |
|
SM_CXMINTRACK(34) |
1. 窗口支持拖拽的最小宽度 |
|
SM_CXPADDEDBORDER(92) |
1. 带标题栏窗口边框的填充量 |
|
SM_CXSCREEN(0) |
1. 主显示屏的屏幕宽度 |
|
SM_CXSIZE(30) |
标题栏上按钮的宽度 |
|
SM_CXSIZEFRAME(32) |
可调整大小的窗口的边框的宽度 |
|
SM_CXSMICON(49) |
推荐的小图标的宽度(一般出现在窗口标题栏) |
|
SM_CXSMSIZE(52) |
小标题按钮的宽度 |
|
SM_CXVIRTUALSCREEN(78) |
虚拟屏幕的宽度(虚拟屏幕是所有显示器的边框) |
|
SM_CXVSCROLL(2) |
垂直滚动条的宽度 |
|
SM_CYBORDER(6) |
1. 一个窗口边框的高 |
|
SM_CYCAPTION(4) |
标题区域的高度 |
|
SM_CYCURSOR(14) |
1. 光标的高 |
|
SM_CYDLGFRAME(8) |
这个值与 SM_CYFIXEDFRAME 是相同的 |
|
SM_CYDOUBLECLK(37) |
双击有效的矩形区域的高度 |
|
SM_CYDRAG(69) |
鼠标在某个矩形内单击移动被认为是拖拽 |
|
SM_CYEDGE(46) |
3-D 边框的高度 |
|
SM_CYFIXEDFRAME(8) |
1. 具有标题栏但不可以调整大小的窗口边框的高度 |
|
SM_CYFOCUSBORDER(84) |
1. DrawFocusRect 函数画出的矩形上下边框的高度 |
|
SM_CYFRAME(33) |
这个值等同于 SM_CYSIZEFRAME |
|
SM_CYFULLSCREEN(17) |
客户区在全屏模式下的高度 |
|
SM_CYHSCROLL(3) |
水平滚动条上箭头位图的高度 |
|
SM_CYICON(12) |
1. 图标的默认高度 |
|
SM_CYICONSPACING(39) |
一个网格单元的大图标视图中项的高度 |
|
SM_CYKANJIWINDOW(18) |
对于系统的双字节字符集版本,这个是汉字在窗口底部的高度 |
|
SM_CYMAXIMIZED(62) |
最大化顶级窗口的高度 |
|
SM_CYMAXTRACK(60) |
一个具有标题栏及可调整大小的窗口所能达到的最大高度 |
|
SM_CYMENU(15) |
单行菜单栏的高 |
|
SM_CYMENUCHECK(72) |
菜单上位图的高度 |
|
SM_CYMENUSIZE(55) |
菜单条按钮的高度 |
|
SM_CYMIN(29) |
窗口的最小高度 |
|
SM_CYMINIMIZED(58) |
最小化窗口的高度 |
|
SM_CYMINSPACING(48) |
各个最小化窗体所占的矩形的高度,该值需要大于等于 SM_CYMINIMIZED |
|
SM_CYMINTRACK(35) |
1. 窗口支持拖拽的最小高度 |
|
SM_CYSCREEN(1) |
1. 主显示屏的屏幕高度 |
|
SM_CYSIZE(31) |
标题栏上按钮的高度 |
|
SM_CYSIZEFRAME(33) |
可调整大小的窗口的边框的高度 |
|
SM_CYSMCAPTION(51) |
小标题的高度 |
|
SM_CYSMICON(50) |
推荐的小图标的高度(一般出现在窗口标题栏) |
|
SM_CYSMSIZE(53) |
小标题按钮的高度 |
|
SM_CYVIRTUALSCREEN(79) |
虚拟屏幕的高度(虚拟屏幕是所有显示器的边框) |
|
SM_CYVSCROLL(20) |
垂直滚动条的宽度 |
|
SM_CYVTHUMB(9) |
垂直滚动条滑块框的高度 |
|
SM_DBCSENABLED(42) |
如果 User32.dll 支持 DBCS 返回非 0 值,否则返回 0 |
|
SM_DEBUG(22) |
如果已安装的 User.exe 的调试版本返回非 0 值,否则返回 0 |
|
SM_DIGITIZER(94) |
1. 如果当前的操作系统是 Windows 7 或者 Windows Server 2008 R2 并且 Tablet PC input 服务已启动,则返回非 0 值,否则返回 0 |
|
SM_IMMENABLED(82) |
如果启用了输入法管理器或输入法编辑器功能,则返回非 0,否则返回 0 |
|
SM_MAXIMUMTOUCHES(95) |
1. 如果有在系统中的数字化仪,则返回非 0,否则返回 0 |
|
SM_MEDIACENTER(87) |
如果当前的操作系统是 Windows XP(MCE,媒体中心版),则返回非 0,否则返回 0 |
|
SM_MENUDROPALIGNMENT(40) |
如果下来菜单相应的菜单栏项目是右对齐的,则返回非 0,否则如果是左对齐返回 0 |
|
SM_MIDEASTENABLED(74) |
如果系统启用了希伯来语和阿拉伯语的语言,则返回非 0,否则返回 0 |
|
SM_MOUSEPRESENT(19) |
1. 如果安装了鼠标返回非 0,否则返回 0 |
|
SM_MOUSEHORIZONTALWHEELPRESENT(91) |
如果鼠标有水平滚动轮,则返回非 0,否则返回 0 |
|
SM_MOUSEWHEELPRESENT(75) |
如果鼠标有垂直滚动轮,则返回非 0,否则返回 0 |
|
SM_NETWORK(63) |
1. 如果存在网络,则返回值最后一位被设置为 1,否则返回 0 |
|
SM_PENWINDOWS(41) |
如果安装了 Windows 手写画板的扩展,则返回非 0,否则返回 0 |
|
SM_REMOTECONTROL(0x2001) |
1. 该系统信息是用在终端服务环境下,用于判断当前的终端服务器会话是否被远程控制 |
|
SM_REMOTESESSION(0x1000) |
1. 该系统信息是用在终端服务环境下 |
|
SM_SAMEDISPLAYFORMAT(81) |
1. 如果所有的显示器具有相同的颜色格式,则返回非 0,否则返回 0 |
|
SM_SECURE(44) |
该系统信息被忽略,它总是返回 0 |
|
SM_SERVERR2(89) |
如果系统是 Windows Server 2003 R2 则返回内部版本号,否则返回 0 |
|
SM_SHOWSOUNDS(70) |
如果用户需要应用程序可视化音频信息,则返回非 0,否则返回 0 |
|
SM_SHUTTINGDOWN(0x2000) |
1. 如果当前会话关闭返回非 0,否则返回 0 |
|
SM_SLOWMACHINE(73) |
如果计算机拥有一个低端(慢速)处理器,则返回非 0,否则返回 0 |
|
SM_STARTER(88) |
如果当前的操作系统是 Windows 7 入门版,Windows Vista 入门版,或 Windows XP 入门版,则返回非 0,否则返回 0 |
|
SM_SWAPBUTTON(23) |
如果鼠标左右键的含义互相交换,则返回非 0,否则返回 0 |
|
SM_SYSTEMDOCKED(0x2004) |
反映了底座模式,返回 0 为非底座模式,否则返回非 0 |
|
SM_TABLETPC(86) |
1. 如果当前的操作系统是 Windows XP Tablet PC 版,或者如果当前的操作系统是 Windows Vista 或 Windows 7 且 Tablet PC input 服务已启动,则返回非 0,否则返回 0 |
|
SM_XVIRTUALSCREEN(76) |
1. 虚拟屏幕左侧的坐标(虚拟屏幕是所有显示器的边框) |
|
SM_YVIRTUALSCREEN(77) |
1. 虚拟屏幕顶侧的坐标(虚拟屏幕是所有显示器的边框) |
返回值:
1. 如果函数调用成功,返回值索引参数对应的配置信息;
2. 如果函数调用失败,返回值是 0。




