[英]MFC: Can we extend the CEdit control class behaviour present in CEditView
我閱讀了一些關於 MFC 的基礎知識,我正在嘗試使用CEditView
實現簡單的編輯器。 如果我目前的理解有誤,請更正。
CEditView
只是一個視圖,物理上不會在其中放置任何控件。
CEditView
只是用戶可以看到和輸入文本的區域。CEdit
控件放在視圖上(就像我們將CEdit
控件放在CDialogView
上CDialogView
)。CEdit
控件只是CEditView.(GetEditCtrl())
。 目前CEdit
提供了很多與編輯相關的功能。 如果我想擴展那個CEdit
成員類,是否可以做到? 它是這樣的:
Class CMyEdit : public CEdit
來自 MSDN:
分兩步構造
CEdit
對象。 首先,調用CEdit
構造函數,然后調用 Create,它創建 Windows 編輯控件並將其附加到CEdit
對象。
我創建了虛擬構造函數:
CMyEdit::CMyEdit
{
}
之后我打電話給Create
:
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID);
//Here I have given dummy CRect and dummy Control ID that is 1;
myEdit->Create(ES_MULTILINE | WS_CHILD |
WS_VISIBLE | WS_TABSTOP |
WS_BORDER,CRect(10, 10, 100, 100), this, 1);
如果我創建並運行該程序,則CEdit
控件將進入CEditView
。 但我不希望對CEditView
物理控制。
我們需要在這里創建方法嗎? 不確定如何在不創建控件的情況下擴展此CEdit
類行為。
CEditView
是一個CEdit
作為視圖,實際上在一個CEdit
和一個CEditView
里面有一個普通的 Windows API Edit 控件。 這是 MFC 使用的一個小技巧。 它創建了一個簡單的 Edit 控件(所以有一個窗口句柄),但是您可以通過CView
指針和CEdit
指針來處理這個句柄。 當您查看代碼時,您會看到GetEditCtrl
只是投射了 this 指針。CEditView
創建一個視圖時,您總是在里面有一個CEdit
/ Edit control
......您無法更改它。CEditView
內部創建了一個額外的控件,那么您肯定會獲得一個新的編輯控件。CView
派生的CMyEditView
,其中包含CMyEdit
(使用完整視圖)。 最簡單的方法就是將CEditView
擴展到CMyEditView
...
不太清楚您要修改的行為,但看起來您知道在 MFC 中您可以創建自己的自定義控件。 您可以在自定義控件類 CMyEdit 中覆蓋 CEdit 的方法,如 OnPaint() 等,並實現相同的效果。 您應該閱讀有關自定義控件的詳細信息中提到的教程,然后您將了解需要在自定義控件中覆蓋的所有方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.