在開發中,大部分情況控制項是直接通過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 的訊息。一旦使用者自定義的視窗函式擷取了傳向原視窗函式的訊息,就可以對被擷取的訊息進行如下處理 將其傳給原來的視窗函式。這是對大多數訊息應該採取的措施,因為子類通常只對原來的視窗特性作少量的改動 擷取該訊息,阻止其向原視窗函式傳...