兩個函式:getscrolnfo和setscrollnfo
乙個結構:scrollinfo
兩個訊息:wm_create和wm_size
滾動條結構體
typedef structcbsize:以位元組為單位,結構體大小。就呼叫者這個引數設定為 sizeof(scrollinfo)tagscrollinfo scrollinfo, *lpscrollinfo;
fmask:指定要設定或檢索的滾動條引數。該成員可以是以下值的組合:
nmin:滾動條最小位置
nmax:滾動條最大位置
npage:滾動頁大小
npos:停止拖動滾頂條後,滾動條位
獲取滾動條資訊
bool getscrollbarinfo(hwnd:是乙個滾動條控制項的控制代碼。否則是乙個具有ws_vscroll或ws_hscroll樣式的視窗控制代碼hwnd hwnd,
long idobject,
pscrollbarinfo psbi
);
idobject:指定滾動條物件。這個引數可以是以下值之一
objid_client hwnd引數是乙個滾動條控制項的控制代碼。
objid_hscroll hwnd視窗水平滾動條。
objid_vscroll hwnd視窗垂直滾動條。
psbi:指向乙個scrollbarinfo結構,以獲得的資訊。再呼叫getscrollbarinfo之前,設定cbsize大小為sizeof(scrollbarinfo)
設定滾動條引數
inthwnd:滾動條控制項或帶標準滾動條的窗體控制代碼,由nbar引數決定。setscrollinfo(
hwnd hwnd,
intnbar,
lpcscrollinfo lpsi,
bool redraw
);
nbar:指定被設定引數的滾動條的型別。這個引數可以是下面值
sb_ctl:設定滾動條控制項。而引數hwnd必須是滾動條控制項的控制代碼。
sb_horz:設定所給定的窗體上標準水平滾動條引數。
sb_vert:設定所給定的窗體上標準垂直滾動條引數。
lpsi:指向scrollinfo結構。在呼叫setscrollinfo之前,設定scrollinfo結構中cbsize成員以標識結構大小,設定成員fmask以說明待設定的滾動條引數
redraw:指定滾動條是否重畫以反映滾動條的變化。
返回值:返回值是滑塊的當前位置。
就像所有訊息一樣,wm_vscroll和wm_hscroll訊息都伴隨著wparam和iparam訊息引數。當滾動條是視窗的一部分時,可以忽略iparam引數:它只用於滾動條是子視窗時,通常是在對話方塊中。
wparam引數被分為低位字和高位字。wparam的低位字代表了滑鼠在滾動條上的動作。這個值被稱為「通知碼」,由乙個以sb開頭的識別符號定義(sb代表滾動條)
如果在滾動條的不同部分按住滑鼠鍵不放,程式可能收到多條滾動條訊息。當鬆開滑鼠鍵時,程式會收到一條帶有sb_endscroll通知碼的訊息。程式通常可以忽略帶sb_endscroll的訊息。windows並不會自己改變滑塊的位置,應用程式需要呼叫setscrollpos函式來改變它。
將滑鼠放在滑塊上然後按下滑鼠鍵時,可以移動滑塊。這將會生成帶sb_thumbtrack 和sb_thumbposition 通知碼的滾動條訊息。當wparam的低位字是sb_thumbtrack時,wparam的高位字是使用者拖動滑塊的當前位置。這個位置處於滾動條範圍的最小值和最大值之間。當wparam的低位字是sb_thumbposition時,wparam的高位字是使用者鬆開滑鼠鍵時滑塊的最終位置。對於其他的滾動條動作,wparam的高位字應被忽略。
1 #include2 #include3 #include4view code#define num 100056
lresult callback windproc(hwnd hwnd, uint message, wparam wparam, lparam lparam);78
int winmain(hinstance hinst, hinstance tmp, lpstr szcmd, int
nshow)933
34//
ws_vscroll視窗滾動條
35 hwnd = createwindow(classname, text("
hello
, null, null, hinst, null);
36if (hwnd ==null)
3741
showwindow(hwnd, nshow);
42updatewindow(hwnd);
4344
while (getmessage(&msg, null, 0, 0
))45
4950
return0;
51}5253
lresult callback windproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)
54108 si.fmask =sif_pos;
109 setscrollinfo(hwnd, sb_vert, &si, true);
110 getscrollbarinfo(hwnd, sb_vert, &si);
111 position =si.npos;
112//
updatewindow(hwnd);
//視窗必須有無效區,否則重新整理也是白刷。替換為invalidaterect強制重新整理
113//
invalidaterect函式會產生wm_paint訊息
114invalidaterect(hwnd, null, false);
115return0;
116case
wm_paint:
117 getscrollbarinfo(hwnd, sb_vert, &si);
118 hdc = beginpaint(hwnd, &pt);
119for (i = 0; i < num; i++)
120124 endpaint(hwnd, &pt);
125return0;
126case
wm_destroy:
127 postquitmessage(0);//
傳送wm_quit訊息
128return0;
129default
:130
break
;131
}132
133return
defwindowproc(hwnd, message, wparam, lparam);
134 }
建立畫刷
hbrush createsolidbrush(初始化乙個指定顏色的畫刷。畫筆可以隨後被選為任何裝置上下文的當前刷子。colorref color
);
獲取當前字型資訊
bool gettextmetrics(該函式把程式當前的字型資訊,存放到textmetrichdc hdc,
lptextmetric lptm
);
Windows程式設計 視窗鍵盤訊息滾動事件
pragma once include define numlines int sizeof sysmetrics sizeof sysmetrics 0 struct sysmetrics numlines 巨集定義是為了得到sysmetrics的數量 include include system...
windows程式設計 滾動條
include define numlines int sizeof sysmetrics sizeof sysmetrics 0 struct sysmetrics lresult callback wndproc hwnd,uint,wparam,lparam 視窗函式原型 int winapi...
Windows程式設計 視窗和訊息
include lresult callback wndproc hwnd,uint,wparam,lparam int winapi winmain hinstance hinstance,hinstance hprevinstance,pstr szcmdline,int icmdshow te...