我阅读了一些有关MFC的基础知识,我正在尝试使用CEditView
实现简单的编辑器。如果我当前的理解有误,请更正。
CEditView
只是一个视图,实际上不会在其中放置任何控件。
CEditView
只是用户可以查看和输入文字的区域。CEdit
控件(例如
我们将CEdit
控件放在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
类行为。
答案 0 :(得分:1)
CEditView
是CEdit
的视图,实际上,在CEdit
和CEditView
中有一个普通的Windows API Edit控件。 MFC正在使用这是一个小技巧。它创建了一个简单的Edit控件(因此有一个窗口句柄),但是您可以通过CView
指针和CEdit
指针来处理该句柄。查看代码时,您会发现GetEditCtrl
只是强制转换了this指针。CEditView
的视图时,内部始终有一个CEdit
/ Edit control
……您无法更改它。 CEditView
内创建了其他控件,请确保获得新的编辑控件。CMyEditView
派生而来的CView
,并且其中包含CMyEdit
(使用完整视图)。 最简单的方法就是将CEditView
扩展到CMyEditView
...
答案 1 :(得分:-1)
尚不清楚您要修改什么行为,但是您似乎知道在MFC中可以创建自己的自定义控件。您可以在自定义控件类CMyEdit中覆盖CEdit的方法,例如OnPaint()等,并实现相同的效果。您应该阅读本教程,其中详细介绍了自定义控件,然后您将了解需要在自定义控件中覆盖哪些所有方法。