win32開發(建立子視窗)

2021-08-13 21:47:21 字數 1830 閱讀 7436

在win32中,有的時候需要建立額外的子視窗。所謂子視窗的概念,就是視窗本身不會超出母視窗的邊界,所有的操作都是在母視窗裡面完成的。子視窗可以用os提供的預設型別來完成,也可以自定義型別來完成,即自定義wndclas***。常用的子視窗有button、combobox、edit、listbox、static、scrollbar、richedit等型別,注意msdn提供的另外一種mdiclient型別是專門為mdi程式準備的。

那麼,**怎麼編寫呢?很簡單,基本上就是一行**,在wm_create裡面新增就可以了,

case wm_create:

hwnd hsub;

hsub = createwindow(

"button", // predefined class

"ok", // button text

ws_visible | ws_child | bs_defpushbutton, // styles

10, // starting x position

10, // starting y position

100, // button width

100, // button height

hwnd, // parent window

null, // no menu

hinst,

null); // pointer not needed

注意,這裡class型別一定要填寫成"button",這也是子視窗之間的最大區別。這裡只要建立了,就可以顯示了。當然,如果是別的型別的子視窗,那就替換成對應的名字就可以了。比如說,如果是"scrollbar",就可以這麼寫,

case wm_create:

hwnd hsub;

hsub = createwindow(

"scrollbar", // predefined class

"ok", // button text

ws_visible | ws_child | bs_defpushbutton, // styles

10, // starting x position

10, // starting y position

100, // button width

100, // button height

hwnd, // parent window

null, // no menu

hinst,

null); // pointer not needed

有興趣的同學可以按照class的name,進行乙個乙個的嘗試。不過,既然子視窗都準備好了,那麼訊息在什麼地方處理呢?其實也不複雜。大部分子視窗的訊息和母視窗共享乙個wndproc函式,直接在對應的wm_command或者wm_notify裡面處理就好了。如果不確定,可以在這兩個地方設定除錯斷點,再根據wparam和lparam分別判斷就可以了。

case wm_notify:

break;

case wm_command:

wmid = loword(wparam);

wmevent = hiword(wparam);

// parse the menu selections:

switch (wmid)

break;

WIN32視窗建立

win32視窗建立過程 1 定義視窗類 在msdn中找到函式原型 winmain 2 定義視窗處理函式 在msdn中找到原型 windowproc 3 設計視窗類 4 註冊視窗類 registerclass registerclas 5 建立視窗 createwindow createwindowe...

建立Win32視窗程式

建立win32視窗程式的步驟 建立win32視窗程式 int winapi winmain hinstance hinstance,hinstance hprevinstance,lpstr lpcmdline,int nshowcmd 構造視窗 winmain wndclas wndclass w...

win32建立子程序方法

看到網上有乙個示例,我查了先關函式,做了一些注釋,自己學習下 include include include using namespace std pragma comment lib,ws2 32 int main 該結構用於指定新程序的主視窗特性 si.cb sizeof si process...