07 Windows程式設計 視窗滾動條

2022-03-19 06:07:43 字數 4232 閱讀 5935

兩個函式:getscrolnfo和setscrollnfo

乙個結構:scrollinfo

兩個訊息:wm_create和wm_size

滾動條結構體

typedef struct

tagscrollinfo scrollinfo, *lpscrollinfo;

cbsize:以位元組為單位,結構體大小。就呼叫者這個引數設定為 sizeof(scrollinfo)

fmask:指定要設定或檢索的滾動條引數。該成員可以是以下值的組合:

nmin:滾動條最小位置 

nmax:滾動條最大位置

npage:滾動頁大小

npos:停止拖動滾頂條後,滾動條位

獲取滾動條資訊

bool getscrollbarinfo(

hwnd hwnd,

long idobject,

pscrollbarinfo psbi

);

hwnd:是乙個滾動條控制項的控制代碼。否則是乙個具有ws_vscroll或ws_hscroll樣式的視窗控制代碼

idobject:指定滾動條物件。這個引數可以是以下值之一

objid_client     hwnd引數是乙個滾動條控制項的控制代碼。

objid_hscroll hwnd視窗水平滾動條。

objid_vscroll hwnd視窗垂直滾動條。

psbi:指向乙個scrollbarinfo結構,以獲得的資訊。再呼叫getscrollbarinfo之前,設定cbsize大小為sizeof(scrollbarinfo)

設定滾動條引數

int

setscrollinfo(

hwnd hwnd,

intnbar,

lpcscrollinfo lpsi,

bool redraw

);

hwnd:滾動條控制項或帶標準滾動條的窗體控制代碼,由nbar引數決定。

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 #include4

#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 }

view code

建立畫刷

hbrush createsolidbrush(

colorref color

);

初始化乙個指定顏色的畫刷。畫筆可以隨後被選為任何裝置上下文的當前刷子。

獲取當前字型資訊

bool gettextmetrics(

hdc hdc,

lptextmetric lptm

);

該函式把程式當前的字型資訊,存放到textmetric

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...