MFC 控制項子類化

2021-08-21 20:25:21 字數 915 閱讀 5588

程式中用到windows通用控制項。比如按鈕控制項,進度條控制項等等。但是有時我們需要給控制項更多的特色,這就需要做控制項的子類化(subclassing).

子類化,通俗來講就是用自己的視窗處理函式來處理特定訊息,並將自己其他訊息還給標準(預設)視窗處理函式。在sdk中,通過setwindowlong來指定乙個自定義視窗處理函式:setwindowlong(hwnd, gwl_wndproc, (long)userwndproc);

_edithwnd = _edithtmlbody.getsafehwnd();//獲得視窗物件(cwnd的派生物件)指標的控制代碼(hwnd)

//_lpeditproc 為內建視窗處理位址

_lpeditproc(wndproc)::setwindowlong(_edithtmlbody.getsafehwnd(),gwlp_wndproc(long)&ctabhtmlbody::subeditproc);

//該函式用來改變指定視窗的屬性       gwlp_wndproc  為視窗設定乙個新的處理函式。

long ctabhtmlbody::subeditproc(hwnd hwnd,uint umsg,wparam wparam,lparam lparam)

return ::callwindowproc(_lpeditproc, hwnd, umsg, wparam, lparam);

}void ctabhtmlbody::showlinenum(hwnd hedit)

::bitblt(hdcedit,0,0,40,clientheigh,hdccpb,0,0,srccopy);

::deletedc(hdccpb);

::releasedc(hedit,hdcedit);

::deleteobject(hdcbmp);

}

學習 MFC子類化

視窗子類化 是建立乙個新的視窗函式代替原來的視窗函式。簡單說來,子類化是靠攔截windows系統中的某些訊息來自己進行處理。自己實現的是子類化乙個編輯框,對編輯框輸入的內容進行限制 只允許0 9 空格 乙個點 定義乙個ceditdemo標頭檔案 邏輯順序 1 在視窗的初始化函式中得到想要子類化的視窗...

WTL下如何子類化控制項

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

視窗的子類化與超類化

1.子類化 改變乙個已經存在的視窗例項的性質 訊息處理與其他例項屬性。在sdk程式設計範疇內,子類化就是改變乙個視窗例項的視窗函式 通過getwindowlong 和setwindowlong 子類化所要做的就是為某視窗例項編寫新的視窗函式。其操作是在例項級別上進行的。在mfc中子類化的情況有所不同...