我正在從CRichEditCtrl派生類。我想讓我的一個實例知道:如何爲自己的消息/事件創建MFC控制寄存器?
更新:現在解決它。
-
當它已經創建(即HWND不爲null) -
在它獲得/失去焦點 -
當文本改變 -
選擇何時更改 -
當發生右擊時(我通過EN_MSGFILTER猜測)
對於1,我發現覆蓋PreSubclassWindow的作品 - HWND已經與CWnd關聯了。
2,3,4我想出了一部分。我可以使用ON_CONTROL_REFLECT(EN_CHANGE/EN_SETFOCUS/EN_KILLFOCUS)
& ON_NOTIFY_REFLECT(EN_SELCHANGE)
。 但是這些只有在我打電話SetEventMask(GetEventMask() |ENM_CHANGE | ENM_SELCHANGE | ENM_MOUSEEVENTS)
時纔有效,並且直到課堂上有一個HWND關聯時才能調用它 - 在班級construstor中做這件事會導致問題。我看不出如何得到1.來努力解決這個問題。
我可以看到
CRichEditCtrl
有
Create
兩個版本:
BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
BOOL CreateEx(DWORD dwExStyle, DWORD dwStyle, const RECT& rect,CWnd* pParentWnd, UINT nID);
所以我添加的這些虛擬版本上我的課,把斷點上。也不曾被稱爲。這可能是由於錯過了MFC的「子類化」/註冊嗎?
試過了,看我的編輯。不起作用。但在我的.rc文件中,我有一個標準** CRichEditCtrl **,使用DDX綁定到** MyEditCtrl **。我想這隻適用於在** CRichEditCtrl **中聲明爲虛擬的方法。我還需要添加什麼? – 2010-02-11 15:43:41
我有點困惑。如果Create/CreateEx從未被調用,那麼MyEditCtrl怎麼會有一個窗口句柄? – 2010-02-11 16:04:48