概述
GetSystemMetrics ()用於得到被定義的系統數據或者系統配置信息.
語法
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 | 縱向排列,從下到上。 |
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 screenSM_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.intx, 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);