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也是需要處理的,因為這些按鍵通...