GetSystemMetrics 函式的用法

2021-06-16 20:11:17 字數 4534 閱讀 5424

可以用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);

以上這段**,是用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 window

lprect 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 函式的用法

可以用getsystemmetrics函式可以獲取系統解析度,但這只是其功能之一,getsystemmetrics函式只有乙個引數,稱之為 索引 這個索引有75個識別符號,通過設定不同的識別符號就可以獲取系統解析度 窗體顯示區域的寬度和高度 滾動條的寬度和高度。為了使使getsystemmetric...

GetSystemMetrics 函式的用法

可以用getsystemmetrics函式可以獲取系統解析度,但這只是其功能之一,getsystemmetrics函式只有乙個引數,稱之為 索引 這個索引有75個識別符號,通過設定不同的識別符號就可以獲取系統解析度 窗體顯示區域的寬度和高度 滾動條的寬度和高度。為了使使getsystemmetric...

c max函式怎麼用 MAX函式怎麼用?

通常情況下,max函式主要用來返回一組數值中的最大值 語法結構 max 數值1,數值2,如下圖 所示 除了這個基本應用外,max函式其實還有很多非常巧妙的應用,我們來看下面的3個例項。1 合併單元格填充序列號 這裡其實也可以用max函式來填充序列號,輸入公式 max a 1 a1 1,按ctrl e...