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 中可用的派生视图类

继承层次结构

CObject

CCmdTarget

CWnd

CView

CCtrlView

CEditView

要求

标头:afxext.h

CEditView::CEditView

构造 CEditView 类型的对象。

CEditView();

注解

构造对象后,必须在使用编辑控件之前调用 CWnd::Create 函数。 如果从 CEditView 派生一个类并使用 CWinApp::AddDocTemplate 将其添加到模板,则框架会调用此构造函数和 Create 函数。

CEditView::dwStyleDefault

包含 CEditView 对象的默认样式。

static const DWORD dwStyleDefault;

注解

将此静态成员作为 函数的 dwStyle 参数传递,以获取 CreateCEditView 对象的默认样式。

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。

除非重写调用 FindTextOnFindNext,否则通常不需要调用 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 对象的引用。

注解

SerializeRawSerializeCEditView 内部实现的不同之处在于,它只读取和写入前面没有对象描述数据的文本。

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 类