CEditView 类
视图类的类型,提供 Windows 编辑控件功能并可用于实现简单的文本编辑器功能。
语法
class CEditView : public CCtrlView
成员
公共构造函数
名称 | 描述 |
---|---|
CEditView::CEditView | 构造 CEditView 类型的对象。 |
公共方法
名称 | 描述 |
---|---|
CEditView::FindText | 在文本中搜索字符串。 |
CEditView::GetBufferLength | 获取字符缓冲区的长度。 |
CEditView::GetEditCtrl | 提供对 CEditView 对象(Windows 编辑控件)的 CEdit 部分的访问。 |
CEditView::GetPrinterFont | 检索当前打印机字体。 |
CEditView::GetSelectedText | 检索当前文本选择。 |
CEditView::LockBuffer | 锁定缓冲区。 |
CEditView::PrintInsideRect | 在给定的矩形中呈现文本。 |
CEditView::SerializeRaw | 将 CEditView 对象作为原始文本序列化到磁盘。 |
CEditView::SetPrinterFont | 设置新的打印机字体。 |
CEditView::SetTabStops | 为屏幕显示画面和打印设置制表位。 |
CEditView::UnlockBuffer | 解锁缓冲区。 |
受保护方法
名称 | 描述 |
---|---|
CEditView::OnFindNext | 查找文本字符串的下一个实例。 |
CEditView::OnReplaceAll | 将出现的所有给定字符串替换为新字符串。 |
CEditView::OnReplaceSel | 替换当前选择。 |
CEditView::OnTextNotFound | 当查找操作无法匹配任何其他文本时调用。 |
公共数据成员
“属性” | 描述 |
---|---|
CEditView::dwStyleDefault | CEditView 类型的对象的默认样式。 |
备注
CEditView
类提供以下附加函数:
打印。
查找和替换。
由于类 CEditView
派生自 CView
类,因此类 CEditView
的对象可与文档和文档模板配合使用。
每个 CEditView
控件的文本保留在其自身的全局内存对象中。 应用程序可以有任意数量的 CEditView
对象。
如果你希望编辑窗口中包含上面列出的附加功能,或者希望获得简单的文本编辑器功能,请创建 CEditView
类型的对象。 CEditView
对象可能会占据窗口的整个工作区。 从 CEditView
派生你自己的类,以添加或修改基本功能或者声明可添加到文档模板的类。
类 CEditView
的默认实现处理以下命令:ID_EDIT_SELECT_ALL、ID_EDIT_FIND、ID_EDIT_REPLACE、ID_EDIT_REPEAT 和 ID_FILE_PRINT。
CEditView
的默认字符限制为 (1024 * 1024 - 1 = 1048575)。 可以通过调用基础编辑控件的 EM_LIMITTEXT 函数来更改此限制。 但是,限制因操作系统和编辑控件类型(单行或多行)而异。 有关这些限制的详细信息,请参阅 EM_LIMITTEXT。
若要更改控件中的此限制,请重写 CEditView
类的 OnCreate()
函数并插入以下代码行:
GetEditCtrl().SetLimitText(nNewVal); //nNewVal, the new character limit
CEditView
类型(或派生自 CEditView
的类型)的对象具有以下限制:
CEditView
不会实现真正的“所见即所得”(WYSIWYG) 编辑。 需要在屏幕易读性和匹配的打印输出之间做出选择时,CEditView
会优先考虑屏幕易读性。CEditView
只能以一种字体显示文本。 不支持特殊字符格式。 有关更强大的功能,请参阅类 CRichEditView。CEditView
可以包含的文本数量是有限的。 限制与CEdit
控件相同。
有关 CEditView
的详细信息,请参阅 MFC 中可用的派生视图类。
继承层次结构
CEditView
要求
标头:afxext.h
CEditView::CEditView
构造 CEditView
类型的对象。
CEditView();
注解
构造对象后,必须在使用编辑控件之前调用 CWnd::Create 函数。 如果从 CEditView
派生一个类并使用 CWinApp::AddDocTemplate
将其添加到模板,则框架会调用此构造函数和 Create
函数。
CEditView::dwStyleDefault
包含 CEditView
对象的默认样式。
static const DWORD dwStyleDefault;
注解
将此静态成员作为 函数的 dwStyle 参数传递,以获取 Create
CEditView
对象的默认样式。
CEditView::FindText
调用 FindText
函数可搜索 CEditView
对象的文本缓冲区。
BOOL FindText(
LPCTSTR lpszFind,
BOOL bNext = TRUE,
BOOL bCase = TRUE);
参数
lpszFind
要查找的文本。
bNext
指定搜索方向。 如果为 TRUE,则朝缓冲区的末尾搜索。 如果为 FALSE,则朝缓冲区的开头搜索。
bCase
指定搜索是否区分大小写。 如果为 TRUE,则搜索区分大小写。 如果为 FALSE,则搜索不区分大小写。
返回值
如果找到搜索文本,则返回非零值;否则返回 0。
备注
此函数从缓冲区中当前所选文本开始,朝 bNext 指定的方向搜索 lpszFind 指定的文本,搜索是否区分大小写由 bCase 指定。 如果找到该文本,则此函数会将所选内容设置为找到的文本并返回一个非零值。 如果未找到该文本,则此函数将返回 0。
除非重写调用 FindText
的 OnFindNext
,否则通常不需要调用 FindText
函数。
CEditView::GetBufferLength
调用此成员函数可获取编辑控件缓冲区中当前的字符数,不包括 null 终止符。
UINT GetBufferLength() const;
返回值
缓冲区中字符串的长度。
CEditView::GetEditCtrl
调用 GetEditCtrl
可获取对编辑视图使用的编辑控件的引用。
CEdit& GetEditCtrl() const;
返回值
对 CEdit
对象的引用。
备注
此控件的类型为 CEdit,因此你可以使用 CEdit
成员函数直接操作 Windows 编辑控件。
注意
使用 CEdit
对象可以更改基础 Windows 编辑控件的状态。 例如,不应使用 CEdit::SetTabStops 函数更改制表符设置,因为 CEditView
会缓存这些设置以便在编辑控件和输出中使用。 请改用 CEditView::SetTabStops。
示例
void CMyEditView::OnInitialUpdate()
{
CEditView::OnInitialUpdate();
// get the edit control and set some initial properties for it
CEdit &theEdit = GetEditCtrl();
// adjust the left margin without changing the right margin
DWORD dwMargins = theEdit.GetMargins();
theEdit.SetMargins(20, HIWORD(dwMargins));
// only accept 10k of text
theEdit.SetLimitText(10 * 1024);
}
CEditView::GetPrinterFont
调用 GetPrinterFont
可获取指向描述当前打印机字体的 CFont 对象的指针。
CFont* GetPrinterFont() const;
返回值
返回指向用于指定当前打印机字体的 CFont
对象的指针;如果尚未设置打印机字体,则返回 NULL。 该指针可能是暂时的,不应存储起来供将来使用。
注解
如果尚未设置打印机字体,则 CEditView
类的默认打印行为是使用用于显示的同一种字体进行打印。
使用此函数确定当前打印机字体。 如果它不是所需的打印机字体,请使用 CEditView::SetPrinterFont 更改字体。
CEditView::GetSelectedText
调用 GetSelectedText
可将所选文本(直到所选内容的末尾或所选内容中第一个回车符前面的字符)复制到 CString
对象中。
void GetSelectedText(CString& strResult) const;
参数
strResult
对要接收所选文本的 CString
对象的引用。
CEditView::LockBuffer
调用此成员函数可获取指向缓冲区的指针。 不应修改缓冲区。
LPCTSTR LockBuffer() const;
返回值
指向编辑控件缓冲区的指针。
CEditView::OnFindNext
在缓冲区中的文本中,朝 bNext 指定的方向搜索 lpszFind 指定的文本,搜索是否区分大小写由 bCase 指定。
virtual void OnFindNext(
LPCTSTR lpszFind,
BOOL bNext,
BOOL bCase);
参数
lpszFind
要查找的文本。
bNext
指定搜索方向。 如果为 TRUE,则朝缓冲区的末尾搜索。 如果为 FALSE,则朝缓冲区的开头搜索。
bCase
指定搜索是否区分大小写。 如果为 TRUE,则搜索区分大小写。 如果为 FALSE,则搜索不区分大小写。
备注
搜索从当前所选内容的开头开始,通过 FindText 调用完成。 在默认实现中,如果未找到该文本,OnFindNext
会调用 OnTextNotFound。
重写 OnFindNext
可更改 CEditView
派生的对象搜索文本的方式。 当用户在标准“查找”对话框中选择“查找下一个”按钮时,CEditView
会调用 OnFindNext
。
CEditView::OnReplaceAll
当用户在标准“替换”对话框中选择“全部替换”按钮时,CEditView
会调用 OnReplaceAll
。
virtual void OnReplaceAll(
LPCTSTR lpszFind,
LPCTSTR lpszReplace,
BOOL bCase);
参数
lpszFind
要查找的文本。
lpszReplace
用于替换搜索文本的文本。
bCase
指定搜索是否区分大小写。 如果为 TRUE,则搜索区分大小写。 如果为 FALSE,则搜索不区分大小写。
备注
OnReplaceAll
在缓冲区中的文本中搜索 lpszFind 指定的文本,搜索是否区分大小写由 bCase 指定。 搜索从当前所选内容的开头开始。 每次找到搜索文本时,此函数都会将出现的文本替换为 lpszReplace 指定的文本。 搜索是通过 FindText 调用完成的。 在默认实现中,如果未找到该文本,会调用 OnTextNotFound。
如果当前所选内容与 lpszFind 不匹配,则所选内容将更新为 lpszFind 指定的文本的第一个实例,且不执行替换。 这样,用户就可以确认这是在所选内容与要替换的文本不匹配时他们想要执行的操作。
重写 OnReplaceAll
可更改 CEditView
派生的对象替换文本的方式。
CEditView::OnReplaceSel
当用户在标准“替换”对话框中选择“替换”按钮时,CEditView
会调用 OnReplaceSel
。
virtual void OnReplaceSel(
LPCTSTR lpszFind,
BOOL bNext,
BOOL bCase,
LPCTSTR lpszReplace);
参数
lpszFind
要查找的文本。
bNext
指定搜索方向。 如果为 TRUE,则朝缓冲区的末尾搜索。 如果为 FALSE,则朝缓冲区的开头搜索。
bCase
指定搜索是否区分大小写。 如果为 TRUE,则搜索区分大小写。 如果为 FALSE,则搜索不区分大小写。
lpszReplace
用于替换找到的文本的文本。
备注
替换所选内容后,此函数在缓冲区中的文本中,朝 bNext 指定的方向搜索 lpszFind 指定的文本的下一个实例,搜索是否区分大小写由 bCase 指定。 搜索是通过 FindText 调用完成的。 如果未找到该文本,则调用 OnTextNotFound。
重写 OnReplaceSel
可更改 CEditView
派生的对象替换所选文本的方式。
CEditView::OnTextNotFound
重写此函数可更改调用 Windows 函数 MessageBeep
的默认实现。
virtual void OnTextNotFound(LPCTSTR lpszFind);
参数
lpszFind
要查找的文本。
CEditView::PrintInsideRect
调用 PrintInsideRect
可在 rectLayout 指定的矩形中打印文本。
UINT PrintInsideRect(
CDC *pDC,
RECT& rectLayout,
UINT nIndexStart,
UINT nIndexStop);
参数
pDC
指向打印机设备上下文的指针。
rectLayout
对指定要在其中呈现文本的矩形的 CRect 对象或 RECT 结构的引用。
nIndexStart
要呈现的第一个字符的缓冲区中的索引。
nIndexStop
要呈现的最后一个字符之后的字符的缓冲区中的索引。
返回值
要打印的下一个字符(即,呈现的最后一个字符之后的字符)的索引。
备注
如果 CEditView
控件不使用样式 ES_AUTOHSCROLL,则文本将在呈现矩形中换行。 如果控件使用样式 ES_AUTOHSCROLL,则文本将在矩形的右边缘处剪裁掉。
rectLayout 对象的 rect.bottom
元素已更改,因此矩形的尺寸定义了原始矩形中由文本占据的部分。
CEditView::SerializeRaw
调用 SerializeRaw
可让 CArchive
对象读取 CEditView
对象中的文本或将其写入文本文件。
void SerializeRaw(CArchive& ar);
参数
ar
对存储序列化文本的 CArchive
对象的引用。
注解
SerializeRaw
与 Serialize
的 CEditView
内部实现的不同之处在于,它只读取和写入前面没有对象描述数据的文本。
CEditView::SetPrinterFont
调用 SetPrinterFont
可将打印机字体设置为 pFont 指定的字体。
void SetPrinterFont(CFont* pFont);
参数
pFont
指向 CFont
类型的对象的指针。 如果为 NULL,则用于打印的字体基于显示字体。
备注
如果你希望视图始终使用特定字体进行打印,请在类的 OnPreparePrinting
函数中包含 SetPrinterFont
调用。 此虚拟函数在打印发生之前被调用,因此字体更改发生在打印视图内容之前。
CEditView::SetTabStops
调用此函数可设置用于显示和打印的制表位。
void SetTabStops(int nTabStops);
参数
nTabStops
每个制表位的宽度,采用对话框单位。
备注
仅支持单个制表位宽度。 (CEdit
对象支持多个制表符宽度。)宽度采用对话框单位,这些单位等于打印或显示时使用的字体的平均字符宽度(仅基于大写和小写字母字符)的四分之一。 不应使用 CEdit::SetTabStops
,因为 CEditView
必须缓存制表位值。
此函数仅修改对其调用了此函数的对象的制表符。 若要更改应用程序中每个 CEditView
对象的制表位,请调用每个对象的 SetTabStops
函数。
示例
此代码片段通过仔细测量控件使用的字体,将控件中的制表位设置为每隔四个字符。
// gain a reference to the edit control
CEdit &theEdit = GetEditCtrl();
// get the font the control is using
CFont *pFont = theEdit.GetFont();
TEXTMETRIC tm;
// get the control's DC, too
CDC *pDC = theEdit.GetDC();
// Select the font that the control uses by default into the DC.
// We must do this because the control may or may not be using
// that font at this exact moment
CFont *pOldFont = pDC->SelectObject(pFont);
// Retrieve text metrics for that font and return the previously
// selected font.
pDC->GetTextMetrics(&tm);
pDC->SelectObject(pOldFont);
// Get an identity rectangle and map it to dialog units
CRect rect(0, 0, 100, 1);
::MapDialogRect((HWND)this, rect);
// We now know that 100 dialog units are rect.Width() screen units,
// so we can multiply screen units by 100 and divide by rect.Width()
// to find dialog units from screen units. tm.tmAveCharWidth is
// the width of _one_ character, so setting the tabs at every
// four characters means we also multiply by four.
SetTabStops((4 * tm.tmAveCharWidth * 100) / rect.Width());
CEditView::UnlockBuffer
调用此成员函数可解锁缓冲区。
void UnlockBuffer() const;
备注
使用完 LockBuffer 返回的指针后调用 UnlockBuffer
。
另请参阅
MFC 示例 SUPERPAD
CCtrlView 类
层次结构图
CEdit 类
CDocument 类
CDocTemplate 类
CCtrlView 类
CRichEditView 类