功能:用於獲得被定義的系統數據或者系統配置信息.
int WINAPI GetSystemMetrics( __in int
nIndex);
下面是GetSystemMetrics函數參數nIndex的定義:
SM_ARRANGE 標誌用於說明系統如何安排最小化窗口..詳細請參看下方備註.:
根據顯示器顯示的不一樣,系統數據可能有所不一樣.
該SM_ARRANGE設置指定系統如何安排最小化窗口,幷包含一個起始位置和方向。起始位置可爲下列值之一。
Value
|
Meaning
|
ARW_BOTTOMLEFT
|
開始在左下角的屏幕(默認位置) 。
|
ARW_BOTTOMRIGHT
|
開始在右下角的屏幕上。至關於ARW_STARTRIGHT.
|
ARW_HIDE
|
在屏幕可見區域,隱藏並最小化窗口。.
|
ARW_TOPLEFT
|
從左上角的屏幕上。至關於ARV_STARTTOP.
|
ARW_TOPRIGHT
|
至關於ARW_STARTTOP | SRW_STARTRIGHT 。
|
方向的安排能夠爲下列值之一。
Value
|
Meaning
|
ARW_DOWN
|
縱向排列,從上到下。
|
ARW_LEFT
|
水平排列,從左到右。
|
ARW_RIGHT
|
水平排列,從右到左。
|
ARW_UP
|
縱向排列,從下到上。
|
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 以像素計算的小圖標的尺寸,小圖標通常出如今窗口
標題欄上。
SM_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的值則鼠標左右鍵交換,不然沒有。
index值:
SM_CXSCREEN = 0 'X Size of screen
SM_CYSCREEN = 1 'Y Size of Screen
SM_CXVSCROLL = 2 'X Size of arrow in vertical scroll bar.
SM_CYHSCROLL = 3 'Y Size of arrow in horizontal scroll bar
SM_CYCAPTION = 4 'Height of windows caption
SM_CXBORDER = 5 'Width of no-sizable borders
SM_CYBORDER = 6 'Height of non-sizable borders
SM_CXDLGFRAME = 7 'Width of dialog box borders
SM_CYDLGFRAME = 8 'Height of dialog box borders
SM_CYHTHUMB = 9 'Height of scroll box on horizontal scroll bar
SM_CXHTHUMB = 10 ' Width of scroll box on horizontal scroll bar
SM_CXICON = 11 'Width of standard icon
SM_CYICON = 12 'Height of standard icon
SM_CXCURSOR = 13 'Width of standard cursor
SM_CYCURSOR = 14 'Height of standard cursor
SM_CYMENU = 15 'Height of menu
SM_CXFULLSCREEN = 16 'Width of client area of maximized window
SM_CYFULLSCREEN = 17 'Height of client area of maximized window
SM_CYKANJIWINDOW = 18 'Height of Kanji window
SM_MOUSEPRESENT = 19 'True is a mouse is present
SM_CYVSCROLL = 20 'Height of arrow in vertical scroll bar
SM_CXHSCROLL = 21 'Width of arrow in vertical scroll bar
SM_DEBUG = 22 'True if deugging version of windows is running
SM_SWAPBUTTON = 23 'True if left and right buttons are swapped.
SM_CXMIN = 28 'Minimum width of window
SM_CYMIN = 29 'Minimum height of window
SM_CXSIZE = 30 'Width of title bar bitmaps
SM_CYSIZE = 31 'height of title bar bitmaps
SM_CXMINTRACK = 34 'Minimum tracking width of window
SM_CYMINTRACK = 35 'Minimum tracking height of window
SM_CXDOUBLECLK = 36 'double click width
SM_CYDOUBLECLK = 37 'double click height
SM_CXICONSPACING = 38 'width between desktop icons
SM_CYICONSPACING = 39 'height between desktop icons
SM_MENUDROPALIGNMENT = 40 'Zero if popup menus are aligned to the left of the memu bar item. True if it is aligned to the right.
SM_PENWINDOWS = 41 'The handle of the pen windows DLL if loaded.
SM_DBCSENABLED = 42 'True if double byte characteds are enabled
SM_CMOUSEBUTTONS = 43 'Number of mouse buttons.
SM_CMETRICS = 44 'Number of system metrics
SM_CLEANBOOT = 67 'Windows 95 boot mode. 0 = normal, 1 = safe, 2 = safe with network
SM_CXMAXIMIZED = 61 'default width of win95 maximised window
SM_CXMAXTRACK = 59 'maximum width when resizing win95 windows
SM_CXMENUCHECK = 71 'width of menu checkmark bitmap
SM_CXMENUSIZE = 54 'width of button on menu bar
SM_CXMINIMIZED = 57 'width of rectangle into which minimised windows must fit.
SM_CYMAXIMIZED = 62 'default height of win95 maximised window
SM_CYMAXTRACK = 60 'maximum width when resizing win95 windows
SM_CYMENUCHECK = 72 'height of menu checkmark bitmap
SM_CYMENUSIZE = 55 'height of button on menu bar
SM_CYMINIMIZED = 58 'height of rectangle into which minimised windows must fit.
SM_CYSMCAPTION = 51 'height of windows 95 small caption
SM_MIDEASTENABLED = 74 'Hebrw and Arabic enabled for windows 95
SM_NETWORK = 63 'bit o is set if a network is present.
SM_SECURE = 44 'True if security is present on windows 95 system
SM_SLOWMACHINE = 73 'true if machine is too slow to run win95.
用法:
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.TCHARszBuffer[10];
2.intx =1024;
3.inty =768;
4.intiLength;
5.iLength = wsprintf(szBuffer, TEXT("%5d"),x);
小提示:szBuffer
數組的長度必定要大於x的長度,不然不能輸出。
以上這段代碼,是用wsprintf將x的值存入szBuffer中,而後在iLength中存放x的長度。這一步實際上解決了兩個問題,將int類型的屏幕寬度轉爲了TCHAR類型,TextOut函數能夠直接輸出TCHAR類型字符串,並且獲取了字符串的長度,那麼咱們就能夠用TextOut函數在
窗體中輸出屏幕的寬度:
TextOut(hdc, 0, 0, szBuffer, iLength);