WTL下如何子類化控制項

2021-04-27 06:34:26 字數 1338 閱讀 9687

在開發中,大部分情況控制項是直接通過rc檔案建立的,但也有時候需要在程式中通過createwindow來建立控制項,下面以button控制項為例說明子類化控制項的兩種方法。

class cbuttonimpl :

public cwindowimpl

~cbuttonimpl(void)

begin_msg_map(cbuttonimpl)

message_handler(wm_getdlgcode, ongetdlgcode)

default_reflection_handler()

end_msg_map()

方法一:使用ddx

class ctestdlg:

public cdialogimpl,

public cwindataexchange,

{begin_msg_map(ctestdlg)

message_handler(wm_initdialog, oninitdialog)

end_msg_map()

begin_ddx_map(ctestdlg)

ddx_control(idc_button,  m_button)

end_ddx_map()

cbuttonimpl m_button;

lresult ctestdlg::oninitdialog(uint /*umsg*/, wparam /*wparam*/, lparam /*lparam*/, bool& bhandled)

{dodataexchange(false);

return bhandled = false;

方法二:使用subclasswindow

class ctestdlg:

public cdialogimpl

{begin_msg_map(ctestdlg)

message_handler(wm_initdialog, oninitdialog)

end_msg_map()

cbuttonimpl m_button;

lresult ctestdlg::oninitdialog(uint /*umsg*/, wparam /*wparam*/, lparam /*lparam*/, bool& bhandled)

{hwnd hbutton = createwindow(text("button"), _t("test"), ws_child | ws_visible | bs_autoradiobutton, 0, 0, 0, 0, m_hwnd, (hmenu)0, hinst, 0); //程式中建立button

m_button.subclasswindow(hbutton );//子類化

MFC 控制項子類化

程式中用到windows通用控制項。比如按鈕控制項,進度條控制項等等。但是有時我們需要給控制項更多的特色,這就需要做控制項的子類化 subclassing 子類化,通俗來講就是用自己的視窗處理函式來處理特定訊息,並將自己其他訊息還給標準 預設 視窗處理函式。在sdk中,通過setwindowlong...

如何子類化(SubclassWindow)窗體

視窗子類化的作用 視窗子類化技術最大的特點就是能夠擷取 windows 的訊息。一旦使用者自定義的視窗函式擷取了傳向原視窗函式的訊息,就可以對被擷取的訊息進行如下處理 將其傳給原來的視窗函式。這是對大多數訊息應該採取的措施,因為子類通常只對原來的視窗特性作少量的改動 擷取該訊息,阻止其向原視窗函式傳...

如何子類化(SubclassWindow)窗體

視窗子類化的作用 視窗子類化技術最大的特點就是能夠擷取 windows 的訊息。一旦使用者自定義的視窗函式擷取了傳向原視窗函式的訊息,就可以對被擷取的訊息進行如下處理 將其傳給原來的視窗函式。這是對大多數訊息應該採取的措施,因為子類通常只對原來的視窗特性作少量的改動 擷取該訊息,阻止其向原視窗函式傳...