(學習記錄)Win32開發之滾動條

2021-08-15 03:15:36 字數 3695 閱讀 9769

bool setscrollrange(hwnd hwnd,  int nbar, int nminpos, int nmaxpos, bool bredraw);

int setscrollpos(hwnd hwnd,  int nbar, int npos, bool bredraw);

int setscrollinfo(hwnd hwnd,  int nbar, lpcscrollinfo lpsi, bool bredraw);

bool getscrollinfo(hwnd hwnd, int nbar, lpcscrollinfo lpsi);

typedef struct tagscrollinfo

scrollinfo, far *lpscrollinfo;

fmask欄位是乙個或多個以sif為字首的標識,他們可以用或運算組合在一起

sif_range: 在setscrollinfo中必須在nmin和nmax中指定滾動條的範圍, 使用getscrollinfo獲取滾動條範圍

sif_pos:與上述類似,通過npos欄位獲取或指定滾動條位置

sif_page:與上述類似,通過npage欄位來獲取或指定頁面大小。

sif_trackpos:只用在getscrollinfo中,而且只處理通知碼是sb_thumbtrack或sb_thumbposition的wm_vscroll或wm_hscroll訊息ntrackpos欄位將返回當前滑塊位置

sif_disablenoscroll標識只用在setscrollinfo中,當設定了這個標識後,被隱藏的滾動條將變為被禁用的滾動條。

sif_all標識是sif_range、sif_pos、sif_page、sif_trackpos的組合

ibar引數為sb_horz或sb_vert。

wm_vscroll(垂直滾動條), wm_hscroll(水平滾動條)

其中,lparam可以被忽略,wparam的低位字為:

#define sb_lineup           0

#define sb_lineleft 0

#define sb_linedown 1

#define sb_lineright 1

#define sb_pageup 2

#define sb_pageleft 2

#define sb_pagedown 3

#define sb_pageright 3

#define sb_thumbposition 4

#define sb_thumbtrack 5

#define sb_top 6

#define sb_left 6

#define sb_bottom 7

#define sb_right 7

#define sb_endscroll 8

當低位字為sb_thumbtrack時,wparam的高位字為滑塊當前位置,當低位字為sb_thumbposition時,高位字為滑鼠鍵送開始滑塊的位置。

1:在程式的視窗中包含滾動條:

只需要在createwindow的第三個引數中包括視窗風格識別符號ws_vscroll或ws_hscroll或同時包含兩者。

2:設定滾動條的範圍:

setscrollrange(hwnd, ibar, imin, imax, bredraw);

該函式的範圍之為滑塊的當前位置,ibar引數可以為sb_vert或者sb_horz, 當設定範圍後需要重回滾動條時,bredraw引數應為true

3:設定滾動條位置:

setscrollpos(hwnd, ibar, ipos, bredraw);

該函式的返回值亦為滑塊當前位置,ipos應為[imin, imax]範圍中的值。當使用者拖動滑塊(訊息的wparam引數的低位字為

sb_thumbtrack或者

sb_thumbposition)時,應使用該函式來修改滑塊的位置,否則滑塊將在使用者滑鼠鬆開後恢復原來的位置

4:訊息處理

程式可以處理

sb_thumbtrack或

sb_thumbposition訊息,但很少同時處理兩者。前者需要在滑塊滑動時移動客戶區的內容,後者只需要在使用者停止拖動滑塊式更新客戶去的內容。同時,程式還可以處理其他相關的訊息,詳見相關程式2。

5:程式的繪製**的結構:

程式在處理滾動條訊息時不應直接繪製客戶區,相反,應該呼叫invalidaterect函式使客戶區無效,接著呼叫updatewindow(hwnd);來重繪客戶區。

6:程式結構:

bool initinstance(hinstance hinstance, int ncmdshow)

showwindow(hwnd, ncmdshow);

updatewindow(hwnd);

return true;

}

lresult callback wndproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)

break;

case wm_size:

break;

case wm_vscroll:

si.fmask = sif_pos;

setscrollinfo(hwnd, sb_vert, &si, true);

getscrollinfo(hwnd, sb_vert, &si);

if (si.npos != ivertpos)

}break;

case wm_command:

}break;

case wm_keydown:

case wm_paint:

break;

case wm_destroy:

postquitmessage(0);

break;

default:

return defwindowproc(hwnd, message, wparam, lparam);

}return 0;

}

winmain函式和與其他相關函式

int apientry wwinmain(_in_ hinstance hinstance,

_in_opt_ hinstance hprevinstance,

_in_ lpwstr lpcmdline,

_in_ int ncmdshow)

haccel hacceltable = loadaccelerators(hinstance, makeintresource(idc_keyboard));

msg msg;

// 主訊息迴圈:

while (getmessage(&msg, nullptr, 0, 0))

}return (int) msg.wparam;}//

// 函式: myregisterclass()

//// 目的: 註冊視窗類。

//atom myregisterclass(hinstance hinstance)

C開發win32程式

1,先建立乙個空的win32工程,再建立乙個c 原始檔到此工程 2,編輯原始檔 include 標頭檔案宣告 int winapi winmain hinstance hinstance,hinstance hprevinstance,pstr szcmdline,int icmdshow 主函式為...

win 32 程式開發流程

windows 程式分為 程式 和 ui user inte ce 資源 兩大部份,兩部份最後以rc 編譯器集成為乙個完整的exe 檔案 圖1 1 所謂ui 資源是指功能選單 對話方塊 外貌 程式圖示 游標形狀等等東西。這些ui 資源的實際內容 二進位制 系借助各 種工具產生,並以各種副檔名存在,如...

win32開發(按鍵訊息)

一般情況下,如果是普通的字元資訊,比如說0 9 a z,或者是a z,一般只要處理wm char資訊就可以了。但是對於具有特殊含義的key,比如說f1 f12,或者是ctrl shift alt tab windows這樣的key,wm keydown和wm keyup也是需要處理的,因為這些按鍵通...