可以用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...