簡體   English   中英

MFC:我們可以擴展 CEditView 中存在的 CEdit 控件類行為嗎

[英]MFC: Can we extend the CEdit control class behaviour present in CEditView

我閱讀了一些關於 MFC 的基礎知識,我正在嘗試使用CEditView實現簡單的編輯器。 如果我目前的理解有誤,請更正。

CEditView只是一個視圖,物理上不會在其中放置任何控件。

  1. CEditView只是用戶可以看到和輸入文本的區域。
  2. 明確不需要將任何CEdit控件放在視圖上(就像我們將CEdit控件放在CDialogViewCDialogView )。
  3. 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類行為。

  1. CEditView是一個CEdit作為視圖,實際上在一個CEdit和一個CEditView里面有一個普通的 Windows API Edit 控件。 這是 MFC 使用的一個小技巧。 它創建了一個簡單的 Edit 控件(所以有一個窗口句柄),但是您可以通過CView指針和CEdit指針來處理這個句柄。 當您查看代碼時,您會看到GetEditCtrl只是投射了 this 指針。
  2. 當您使用CEditView創建一個視圖時,您總是在里面有一個CEdit / Edit control ......您無法更改它。
  3. 如果您在CEditView內部創建了一個額外的控件,那么您肯定會獲得一個新的編輯控件。
  4. 如果您無法創建從CView派生的CMyEditView ,其中包含CMyEdit (使用完整視圖)。

最簡單的方法就是將CEditView擴展到CMyEditView ...

不太清楚您要修改的行為,但看起來您知道在 MFC 中您可以創建自己的自定義控件。 您可以在自定義控件類 CMyEdit 中覆蓋 CEdit 的方法,如 OnPaint() 等,並實現相同的效果。 您應該閱讀有關自定義控件的詳細信息中提到的教程,然后您將了解需要在自定義控件中覆蓋的所有方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM