子視窗控制項 2 之訊息處理

2021-06-08 07:10:42 字數 3426 閱讀 1618

通知碼進一步給出每條訊息的意思,下面是按鈕的通知碼的可能值。

按鈕通知碼識別符號

值 bn_clicked

0bn_paint

1bn_hilite或bn_pushed

2bn_disable

3bn_disable

4bn_doubleclicked或bn_dblclk

5bn_setfocus

6bn_killfocus7

每個子視窗有乙個控制代碼和唯一的id,知道其中乙個就可以找到另乙個,如果知道了子視窗控制代碼,可以通過一下函式獲取id

id=getwindowlong(hwndchlid,gwl_id);
也可以使用另乙個函式

id=getdlgctrlid(hwndchild);
知道子視窗id和父視窗控制代碼,可以得到子視窗控制代碼

hwndchild=getdlgitem(hwndparend,id);
通過給windows傳送乙個bm_getstate訊息,可以模擬按鍵按鈕的狀態變化,下面的語句可以讓按鈕看上去像按下去一樣

sendmessage(hwndbutton,bm_setstate,1,0);//按下去的效果

sendmessage(hwndbutton,bm_setstate,0,0);//正常狀況

核取方塊:在處理來自控制項的wm_command訊息時,可以使用下面的**切換選中標記

sendmessage((hwnd)lparam,mb_setcheck,(wparam)!sendmessage((hwnd)lparam,bm_getcheck,0,0),0);

icheck=(int)sendmessage(hwndbutton,bm_getcheck,0,0);//選中返回非0

單選按鈕:

sendmessage(hwndbutton,bm_setcheck,1,0);//選中

sendmessage(hwndbutton,bm_setcheck,0,0);//未選中

改變按鈕文字:

setwindowtext(hwnd,pszstring);

ilength=getwindowtext(hwnd,pszbuffer,imaxlength);

ilength=getwindowlength(hwnd);

可見的按鈕和啟動的按鈕如果在建立視窗類是沒有包括ws_visible,子視窗將不會顯示,除非使用了下面的語句:

showwindow(hwndchild,sw_shownormal);

iswindowvisible(hwndchild);//判斷是否可見

可以使用下面語句禁止和重啟按鈕

enablewindow(hwndchild,false);//按鈕不可用,按鈕變成灰色

enablewindow(hwndchild,true);//按鈕可用

下面來看看一段完整的程式:

#include#includelresult callback windowproc(

hwnd hwnd, // handle to window

uint umsg, // message identifier

wparam wparam, // first message parameter

lparam lparam // second message parameter

);hinstance hinst;

int winapi winmain(

hinstance hinstance, // handle to current instance

hinstance hprevinstance, // handle to previous instance

lpstr lpcmdline, // command line

int ncmdshow // show state

) hwnd=createwindow(

text("this is title"), // window name

cw_usedefault, // horizontal position of window

cw_usedefault, // vertical position of window

cw_usedefault, // window width

cw_usedefault, // window height

null, // handle to parent or owner window

null, // menu handle or child identifier

null // window-creation data

); showwindow(hwnd,ncmdshow);

updatewindow(hwnd);

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

return msg.wparam; }

lresult callback windowproc(

hwnd hwnd, // handle to window

uint umsg, // message identifier

wparam wparam, // first message parameter

lparam lparam // second message parameter

) break;

case wm_command:

if(wparam==nbuttonid)

}return defwindowproc(hwnd,umsg,wparam,lparam);

}

結果如下:

子視窗控制項 2 之訊息處理

通知碼進一步給出每條訊息的意思,下面是按鈕的通知碼的可能值。按鈕通知碼識別符號 值bn clicked 0bn paint 1bn hilite或bn pushed 2bn disable 3bn disable 4bn doubleclicked或bn dblclk 5bn setfocus 6b...

子視窗向父視窗傳送訊息

1.自定義對話方塊中,m pview 是父視窗的指標 void cex07cdialog onbnclickedok else 2.父視窗響應 begin message map cex07cview,cview on wm lbuttondown on wm rbuttondown on mess...

控制項是不是子視窗

控制項與子視窗是什麼關係呢?答案是多數控制項為子視窗,個別除外.依據嘛,看下面從某本書裡摘抄的 在建立普通視窗時,首先定義視窗類別,並使用registerclass將其註冊到windows中,然後用createwindow命令依據該視窗類別建立乙個普通視窗,從第三章開始,我們就是這麼做的。但是,當您...