CEdit Class

提供 Windows 编辑控件功能。

语法

class CEdit : public CWnd

成员

公共构造函数

“属性” 描述
CEdit:: CEdit 构造 CEdit 控件对象。

公共方法

“属性” 描述
CEdit:: CanUndo 确定是否可以撤消编辑控件操作。
CEdit:: CharFromPos 检索距离指定位置最近的字符的行和字符索引。
CEdit:: Clear 如果编辑控件中有任何) ,则删除 (清除) 当前选择 (。
CEdit:: Copy 如果 "编辑" 控件中的任何) 以 CF_TEXT 格式 (,则将当前选定内容复制到剪贴板。
CEdit:: Create 创建 Windows 编辑控件,并将其附加到 CEdit 对象。
CEdit:: Cut 删除当前所选内容) (剪切 (如果编辑控件中有任何) ,并以 CF_TEXT 格式将删除的文本复制到剪贴板。
CEdit:: EmptyUndoBuffer 重置 (清除) 编辑控件的撤消标志。
CEdit:: FmtLines 设置在多行编辑控件中包含软换行符字符。
CEdit:: GetCueBanner 当控件为空且不具有焦点时,检索作为文本提示或提示显示在编辑控件中的文本。
CEdit:: GetFirstVisibleLine 确定编辑控件中最顶层的可见行。
CEdit:: GetHandle 检索当前为多行编辑控件分配的内存的句柄。
CEdit:: GetHighlight 获取在当前编辑控件中突出显示的文本范围内的起始字符和结束字符的索引。
CEdit:: GetLimitText 获取此可包含的最大文本量 CEdit
CEdit:: GetLine 从编辑控件中检索一行文本。
CEdit:: GetLineCount 检索多行编辑控件中的行数。
CEdit:: GetMargins 获取此的左边距和右边距 CEdit
CEdit:: GetModify 确定编辑控件的内容是否已被修改。
CEdit:: GetPasswordChar 检索用户输入文本时在编辑控件中显示的密码字符。
CEdit:: GetRect 获取编辑控件的格式设置矩形。
CEdit:: GetSel 获取编辑控件中当前选定内容的第一个和最后一个字符位置。
CEdit:: HideBalloonTip 隐藏与当前编辑控件关联的任何气球状提示。
CEdit:: LimitText 限制用户可输入到编辑控件中的文本的长度。
CEdit:: LineFromChar 检索包含指定字符索引的行的行号。
CEdit:: LineIndex 检索多行编辑控件中的行的字符索引。
CEdit:: LineLength 检索编辑控件中的行的长度。
CEdit:: LineScroll 滚动多行编辑控件的文本。
CEdit::P aste 将剪贴板中的数据插入到当前光标位置的编辑控件中。 仅当剪贴板包含 CF_TEXT 格式的数据时,才插入数据。
CEdit::P osFromChar 检索指定字符索引的左上角的坐标。
CEdit:: ReplaceSel 用指定的文本替换编辑控件中的当前选定内容。
CEdit:: SetCueBanner 设置当控件为空且不具有焦点时,在编辑控件中显示为文本提示或提示的文本。
CEdit:: SetHandle 将句柄设置为多行编辑控件将使用的本地内存。
CEdit:: SetHighlight 突出显示当前编辑控件中显示的文本范围。
CEdit:: SetLimitText 设置此可包含的最大文本量 CEdit
CEdit:: SetMargins 为此设置左边距和右边距 CEdit
CEdit:: SetModify 设置或清除编辑控件的修改标志。
CEdit:: SetPasswordChar 设置或删除用户输入文本时在编辑控件中显示的密码字符。
CEdit:: SetReadOnly 设置编辑控件的只读状态。
CEdit:: SetRect 设置多行编辑控件的格式设置矩形并更新控件。
CEdit:: SetRectNP 设置多行编辑控件的格式设置矩形,而不重绘控件窗口。
CEdit:: SetSel 选择编辑控件中的一系列字符。
CEdit:: SetTabStops 在多行编辑控件中设置制表位。
CEdit:: ShowBalloonTip 显示与当前编辑控件关联的气球状提示。
CEdit:: Undo 反转最后一个编辑控件操作。

备注

编辑控件是一个矩形子窗口,用户可以在其中输入文本。

你可以从对话框模板或直接在代码中创建 "编辑" 控件。 在这两种情况下,首先调用构造函数 CEdit 来构造 CEdit 对象,然后调用 create 成员函数以创建 Windows 编辑控件并将其附加到 CEdit 对象。

构造可以是从派生的类中的一个单步过程 CEdit 。 编写派生类的构造函数,并 Create 从构造函数中调用。

CEdit 从继承重要的功能 CWnd 。 若要设置和检索对象中的文本 CEdit ,请使用 CWnd 成员函数 SetWindowTextGetWindowText,它设置或获取编辑控件的全部内容,即使它是多行控件也是如此。 多行控件中的文本行由 "\r\n" 字符序列分隔。 此外,如果编辑控件为多行,则通过调用 CEdit 成员函数 GetLineSetSelGetSelReplaceSel来获取和设置控件文本的部分文本。

如果要将编辑控件发送的 Windows 通知消息处理到其父 (通常是派生自) 的类 CDialog ,请将消息映射项和消息处理程序成员函数添加到每个消息的父类。

每个消息映射项都采用以下形式:

ON_通知( id )

其中 id 指定了发送通知的编辑控件的子窗口 ID, memberFxn 是您编写的用于处理通知的父成员函数的名称。

父的函数原型如下所示:

afx_msg void memberFxn ( ) ;

下面是可能的消息映射项的列表,以及要将它们发送到父级的情况的说明:

  • ON_EN_CHANGE 用户执行了一项操作,该操作可能会更改编辑控件中的文本。 与 EN_UPDATE 通知消息不同,此通知消息将在 Windows 更新显示后发送。

  • ON_EN_ERRSPACE 编辑控件无法分配足够的内存来满足特定的请求。

  • ON_EN_HSCROLL 用户单击编辑控件的水平滚动条。 更新屏幕之前,会通知父窗口。

  • ON_EN_KILLFOCUS 编辑控件丢失了输入焦点。

  • ON_EN_MAXTEXT 当前插入超出了编辑控件的指定字符数,并且已被截断。 当编辑控件没有 ES_AUTOHSCROLL 样式,并且要插入的字符数超过编辑控件的宽度时,还发送。 当编辑控件没有 ES_AUTOVSCROLL 样式,并且文本插入导致的行总数超出编辑控件的高度时,也会发送。

  • ON_EN_SETFOCUS 在编辑控件接收输入焦点时发送。

  • ON_EN_UPDATE 编辑控件将显示已更改的文本。 在控件设置文本格式之后但在屏幕上发出文本后发送,以便可以更改窗口大小(如有必要)。

  • ON_EN_VSCROLL 用户单击编辑控件的垂直滚动条。 更新屏幕之前,会通知父窗口。

如果在 CEdit 对话框中创建一个对象,则 CEdit 当用户关闭对话框时,该对象会自动销毁。

如果 CEdit 使用对话框编辑器从对话框资源创建对象,则 CEdit 当用户关闭对话框时,对象会自动销毁。

如果在 CEdit 窗口中创建对象,则可能还需要销毁它。 如果在 CEdit 堆栈上创建对象,则该对象会自动销毁。 如果 CEdit 使用函数在堆上创建对象 new ,则必须对对象调用以在 delete 用户终止 Windows 编辑控件时销毁该对象。 如果在对象中分配任何内存 CEdit ,请重写 CEdit 析构函数以释放分配。

若要修改编辑控件中的某些样式 (例如 ES_READONLY) 则必须将特定消息发送到控件,而不是使用 ModifyStyle。 请参阅 Windows SDK 中的 编辑控件样式

有关的详细信息 CEdit ,请参阅 控件

继承层次结构

CObject

CCmdTarget

CWnd

CEdit

要求

标头: afxwin.h

CEdit:: CanUndo

调用此函数可确定是否可以撤消上一个编辑操作。

BOOL CanUndo() const;

返回值

如果通过调用成员函数可以撤消最后一个编辑操作,则为非零 Undo ; 如果无法撤消,则为0。

备注

有关详细信息,请参阅 Windows SDK 中的 EM_CANUNDO

示例

请参阅 CEdit:: Undo的示例。

CEdit:: CEdit

构造 CEdit 对象。

CEdit();

备注

使用 Create 构造 Windows 编辑控件。

示例

// Declare a local CEdit object.
CEdit myEdit;

// Declare a dynamic CEdit object.
CEdit *pmyEdit = new CEdit;

CEdit:: CharFromPos

调用此函数可检索此控件中最接近指定点的字符的从零开始的行和字符索引 CEdit

int CharFromPos(CPoint pt) const;

parameters

pt
此对象的工作区中某个点的坐标 CEdit

返回值

低序位字中的字符索引和高位字中的行索引。

备注

备注

从 Windows 95 和 Windows NT 4.0 开始,此成员函数可用。

有关详细信息,请参阅 Windows SDK 中的 EM_CHARFROMPOS

示例

// CMyEdit inherits from CEdit
void CMyEdit::OnLButtonDown(UINT nFlags, CPoint point)
{
   int n = CharFromPos(point);
   int nLineIndex = HIWORD(n);
   int nCharIndex = LOWORD(n);
   TRACE(_T("nLineIndex = %d, nCharIndex = %d\r\n"), nLineIndex, nCharIndex);

   CEdit::OnLButtonDown(nFlags, point);
}

CEdit:: Clear

调用此函数可删除 (清除) 当前选择 (如果编辑控件中有任何) 。

void Clear();

备注

Clear可以通过调用Undo成员函数来撤消执行的删除操作。

若要删除当前所选内容并将删除的内容放入剪贴板,请调用 Cut 成员函数。

有关详细信息,请参阅 Windows SDK 中的 WM_CLEAR

示例

// Delete all of the text.
m_myEdit.SetSel(0, -1);
m_myEdit.Clear();

CEdit:: Copy

调用此函数以要复制当前所选内容, (如果 "编辑" 控件中的任何) CF_TEXT 格式。

void Copy();

备注

有关详细信息,请参阅 Windows SDK 中的 WM_COPY

示例

// Copy all of the text to the clipboard.
m_myEdit.SetSel(0, -1);
m_myEdit.Copy();

CEdit:: Create

创建 Windows 编辑控件,并将其附加到 CEdit 对象。

virtual BOOL Create(
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID);

parameters

dwStyle
指定编辑控件的样式。 将 编辑样式 的任意组合应用于控件。

rect
指定编辑控件的大小和位置。 可以是 CRect 对象或 RECT 结构。

pParentWnd
指定编辑控件的父窗口 (通常为 CDialog) 。 值不得为 NULL。

nID
指定编辑控件的 ID。

返回值

如果初始化成功,则为非零值;否则为0。

备注

可以通过 CEdit 两个步骤构造对象。 首先,调用 CEdit 构造函数,然后调用 Create ,它创建 Windows 编辑控件并将其附加到 CEdit 对象。

Create执行时,Windows 会将WM_NCCREATEWM_NCCALCSIZEWM_CREATEWM_GETMINMAXINFO消息发送到编辑控件。

默认情况下,将通过基类中的 OnNcCreateOnNcCalcSizeOnCreateOnGetMinMaxInfo 成员函数来处理这些消息 CWnd 。 若要扩展默认消息处理,请从派生类 CEdit ,将消息映射添加到新类,并重写上述消息处理程序成员函数。 OnCreate例如,重写,以便为新类执行所需的初始化。

将以下 窗口样式 应用于编辑控件。

  • 始终 WS_CHILD

  • WS_VISIBLE 通常

  • 很少 WS_DISABLED

  • WS_GROUP 分组控件

  • WS_TABSTOP 以按 tab 键顺序包含编辑控件

示例

// dynamically create an edit control
CEdit *pEdit = new CEdit;
pEdit->Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,
              CRect(10, 10, 100, 100), this, 1);

CEdit:: Cut

调用此函数可删除 (剪切) 当前所选内容 (如果编辑控件中有任何) ,并以 CF_TEXT 格式将删除的文本复制到剪贴板。

void Cut();

备注

Cut可以通过调用Undo成员函数来撤消执行的删除操作。

若要删除当前所选内容而不将删除的文本放入剪贴板,请调用 Clear 成员函数。

有关详细信息,请参阅 Windows SDK 中的 WM_CUT

示例

// Delete all of the text and copy it to the clipboard.
m_myEdit.SetSel(0, -1);
m_myEdit.Cut();

CEdit:: EmptyUndoBuffer

调用此函数可重置 (清除) 编辑控件的撤消标志。

void EmptyUndoBuffer();

备注

编辑控件现在无法撤消上一个操作。 只要编辑控件中的操作可以撤消,就会设置 undo 标志。

调用SetWindowTextSetHandle成员函数时,会自动清除 undo 标志 CWnd

有关详细信息,请参阅 Windows SDK 中的 EM_EMPTYUNDOBUFFER

示例

// Clear the undo buffer.
if (m_myEdit.CanUndo())
{
   m_myEdit.EmptyUndoBuffer();
   ASSERT(!m_myEdit.CanUndo());
}

CEdit:: FmtLines

调用此函数可设置在多行编辑控件中包含软换行符字符。

BOOL FmtLines(BOOL bAddEOL);

parameters

bAddEOL
指定是否要插入软换行字符。 如果值为 TRUE,则插入字符;如果值为 FALSE,则将其删除。

返回值

如果出现任何格式设置,则为非零值;否则为0。

备注

软换行符由两个回车符和插入到由于换行而中断的行尾插入的换行。 硬分行符包含一个回车符和一个换行符。 以硬分行符结尾的行不受影响 FmtLines

仅当 CEdit 对象为多行编辑控件时,Windows 才会响应。

FmtLines 仅影响由 GetHandle 返回的缓冲区和 WM_GETTEXT返回的文本。 它不会影响编辑控件中的文本显示。

有关详细信息,请参阅 Windows SDK 中的 EM_FMTLINES

示例

CString strText;

// Add soft line-break breaks.
m_myEdit.FmtLines(TRUE);

// Dump the text of the edit control.
m_myEdit.GetWindowText(strText);
AFXDUMP(strText);

// Remove soft line-break breaks.
m_myEdit.FmtLines(FALSE);

CEdit:: GetCueBanner

当控件为空时,检索在编辑控件中显示为文本提示或提示的文本。

BOOL GetCueBanner(
    LPWSTR lpszText,
    int cchText) const;

CString GetCueBanner() const;

parameters

lpszText
弄指向包含提示文本的字符串的指针。

cchText
中可接收的字符数。 此数字包括终止 NULL 字符。

返回值

对于第一个重载,如果方法成功,则为 TRUE;否则为 FALSE。

对于第二个重载,是指如果方法成功,则为包含提示文本的 CString ;否则,空字符串 ( "" ) 。

备注

此方法发送 Windows SDK 中描述的 EM_GETCUEBANNER 消息。 有关详细信息,请参阅 Edit_GetCueBannerText 宏。

CEdit:: GetFirstVisibleLine

调用此函数可确定编辑控件中最顶层的可见行。

int GetFirstVisibleLine() const;

返回值

最顶部可见行的从零开始的索引。 对于单行编辑控件,返回值为0。

备注

有关详细信息,请参阅 Windows SDK 中的 EM_GETFIRSTVISIBLELINE

示例

int nFirstVisible = m_myEdit.GetFirstVisibleLine();

// Scroll the edit control so that the first visible line
// is the first line of text.
if (nFirstVisible > 0)
{
   m_myEdit.LineScroll(-nFirstVisible, 0);
}

CEdit:: GetHandle

调用此函数可检索当前为多行编辑控件分配的内存的句柄。

HLOCAL GetHandle() const;

返回值

一个本地内存句柄,用于标识保存编辑控件内容的缓冲区。 如果发生错误,如将消息发送到单行编辑控件,则返回值为0。

备注

该句柄是一个本地内存句柄,可由将本地内存句柄作为参数的任何 本地 Windows 内存函数使用。

GetHandle 仅由多行编辑控件处理。

GetHandle仅当使用 DS_LOCALEDIT 样式标志设置创建对话框时,才在对话框中为多行编辑控件调用。 如果未设置 DS_LOCALEDIT 样式,则仍将获得一个非零返回值,但你将无法使用返回值。

备注

GetHandle 不会与 Windows 95/98 一起使用。 如果 GetHandle 在 Windows 95/98 中调用,它将返回 NULL。 GetHandle 将按 Windows NT 版本3.51 及更高版本中所述的方式运行。

有关详细信息,请参阅 Windows SDK 中的 EM_GETHANDLE

示例

HLOCAL h = m_myEdit.GetHandle();
LPCTSTR lpszText = (LPCTSTR)::LocalLock(h);

// Dump the text of the edit control.
AFXDUMP(lpszText);

::LocalUnlock(h);

CEdit:: GetHighlight

获取在当前编辑控件中突出显示的文本范围中的第一个字符和最后一个字符的索引。

BOOL GetHighlight(
    int* pichStart,
    int* pichEnd) const;

parameters

pichStart
弄突出显示的文本范围中第一个字符的从零开始的索引。

pichEnd
弄突出显示的文本范围中最后一个字符的从零开始的索引。

返回值

如果此方法成功,则为 TRUE;否则为 FALSE。

备注

此方法发送 Windows SDK 中描述的 EM_GETHILITE 消息。 SetHighlightGetHighlight 当前仅对 UNICODE 版本启用。

CEdit:: GetLimitText

调用此成员函数以获取此对象的文本限制 CEdit

UINT GetLimitText() const;

返回值

此对象的当前文本限制(在 TCHARs 中) CEdit

备注

"文本限制" 是编辑控件可以接受的最大文本量(以 TCHARs)。

备注

从 Windows 95 和 Windows NT 4.0 开始,此成员函数可用。

有关详细信息,请参阅 Windows SDK 中的 EM_GETLIMITTEXT

示例

CString strText(_T("I'm an edit control!"));
UINT nLength = strText.GetLength() * sizeof(TCHAR);

// Want the text limit to be at least the size of the new string.
if (m_myEdit.GetLimitText() < nLength)
   m_myEdit.SetLimitText(nLength);

m_myEdit.SetWindowText(strText);

CEdit:: GetLine

调用此函数可从编辑控件中检索一行文本,并将其放在 lpszBuffer 中。

int GetLine(
    int nIndex,
    LPTSTR lpszBuffer) const;

int GetLine(
    int nIndex,
    LPTSTR lpszBuffer,
    int nMaxLength) const;

parameters

nIndex
指定要从多行编辑控件中检索的行号。 行号从零开始;值0指定第一行。 单行编辑控件将忽略此参数。

lpszBuffer
指向接收行的副本的缓冲区。 缓冲区的第一个字必须指定可复制到缓冲区的最大 TCHARs 数。

nMaxLength
指定可以复制到缓冲区的最大 TCHAR 字符数。 GetLine 在调用 Windows 之前,将此值放在 lpszBuffer 的第一个字中。

返回值

实际复制的字符数。 如果 nIndex 指定的行号大于编辑控件中的行数,则返回值为0。

备注

复制的行不包含 null 终止字符。

有关详细信息,请参阅 Windows SDK 中的 EM_GETLINE

示例

请参阅 CEdit:: GetLineCount的示例。

CEdit:: GetLineCount

调用此函数可检索多行编辑控件中的行数。

int GetLineCount() const;

返回值

一个整数,其中包含多行编辑控件中的行数。 如果未在编辑控件中输入文本,则返回值为1。

备注

GetLineCount 仅由多行编辑控件处理。

有关详细信息,请参阅 Windows SDK 中的 EM_GETLINECOUNT

示例

int i, nLineCount = m_myEdit.GetLineCount();
CString strText, strLine;
// Dump every line of text of the edit control.
for (i = 0; i < nLineCount; i++)
{
   // length of line i:
   int len = m_myEdit.LineLength(m_myEdit.LineIndex(i));
   m_myEdit.GetLine(i, strText.GetBuffer(len), len);
   strText.ReleaseBuffer(len);
   strLine.Format(_T("line %d: '%s'\n"), i, strText);
   AFXDUMP(strLine);
}

CEdit:: GetMargins

调用此成员函数以检索此编辑控件的左边距和右边距。

DWORD GetMargins() const;

返回值

低序位字中左边距的宽度和高位字中右边距的宽度。

备注

边距以像素为单位进行度量。

备注

从 Windows 95 和 Windows NT 4.0 开始,此成员函数可用。

有关详细信息,请参阅 Windows SDK 中的 EM_GETMARGINS

示例

请参阅 CEditView:: GetEditCtrl的示例。

CEdit:: GetModify

调用此函数可确定编辑控件的内容是否已被修改。

BOOL GetModify() const;

返回值

如果编辑控件的内容已被修改,则为非零值;如果保持不变,则为0。

备注

Windows 将维护一个内部标志,指示编辑控件的内容是否已更改。 当编辑控件是首次创建的,并且还可以通过调用 SetModify 成员函数清除时,清除此标志。

有关详细信息,请参阅 Windows SDK 中的 EM_GETMODIFY

示例

// Reset the modified state only if my edit has been modified.
if (m_myEdit.GetModify())
   m_myEdit.SetModify(FALSE);

CEdit:: GetPasswordChar

调用此函数可检索用户输入文本时在编辑控件中显示的密码字符。

TCHAR GetPasswordChar() const;

返回值

指定要显示的字符而不是用户键入的字符。 如果不存在密码字符,则返回值为 NULL。

备注

如果创建的编辑控件具有 ES_PASSWORD 样式,则支持该控件的 DLL 决定默认密码字符。 清单或 nativemethods.initcommoncontrolsex 方法决定哪个 DLL 支持编辑控件。 如果 user32.dll 支持编辑控件,则默认密码字符为星号 ( "*"、U + 002A) 。 如果 comctl32.dll 版本6支持编辑控件,则默认字符为黑色圆圈 ( "●"、U + 25CF) 。 有关支持公共控件的 DLL 和版本的详细信息,请参阅 Shell 和公共控件版本

此方法发送 Windows SDK 中描述的 EM_GETPASSWORDCHAR 消息。

示例

// Turn on the password mode.
m_myEdit.SetPasswordChar('*');
ASSERT(m_myEdit.GetStyle() & ES_PASSWORD);
ASSERT(m_myEdit.GetPasswordChar() == '*');

CEdit:: GetRect

调用此函数可获取编辑控件的格式设置矩形。

void GetRect(LPRECT lpRect) const;

parameters

lpRect
指向 RECT 接收格式设置矩形的结构。

备注

格式设置矩形是文本的限制矩形,它与编辑控件窗口的大小无关。

可以通过 SetRectSetRectNP 成员函数修改多行编辑控件的格式设置矩形。

有关详细信息,请参阅 Windows SDK 中的 EM_GETRECT

示例

请参阅 CEdit:: LimitText的示例。

CEdit:: GetSel

调用此函数以获取当前所选内容的起始和结束字符位置 (如果编辑控件中有任何) ,请使用返回值或参数。

DWORD GetSel() const;

void GetSel(
    int& nStartChar,
    int& nEndChar) const;

parameters

nStartChar
引用一个整数,该整数将接收当前选定内容中第一个字符的位置。

nEndChar
引用一个整数,该整数将接收超出当前选定内容末尾的第一个 nonselected 字符的位置。

返回值

返回 DWORD 的版本返回一个值,该值包含低序位字中的起始位置,以及在高位字中选定内容末尾后的第一个 nonselected 字符的位置。

备注

有关详细信息,请参阅 Windows SDK 中的 EM_GETSEL

示例

// Set the selection to be all characters after the current selection.
DWORD dwSel = m_myEdit.GetSel();
m_myEdit.SetSel(HIWORD(dwSel), -1);

CEdit:: HideBalloonTip

隐藏与当前编辑控件关联的任何气球状提示。

BOOL HideBalloonTip();

返回值

如果此方法成功,则为 TRUE;否则为 FALSE。

备注

此函数发送 Windows SDK 中描述的 EM_HIDEBALLOONTIP 消息。

CEdit:: LimitText

调用此函数可限制用户可在编辑控件中输入的文本的长度。

void LimitText(int nChars = 0);

parameters

nChars
指定用户可输入文本的 TCHARs) 的长度 (。 如果此参数为0,则文本长度设置为 UINT_MAX 字节。 这是默认行为。

备注

更改文本限制仅限制用户可输入的文本。 它不会影响编辑控件中已有的任何文本,也不会影响中的 SetWindowText 成员函数复制到编辑控件中的文本长度 CWnd 。 如果应用程序使用 SetWindowText 函数将更多的文本放入编辑控件中,而不是调用中指定的 LimitText ,则用户可以删除编辑控件中的任何文本。 但是,文本限制会阻止用户将现有文本替换为新文本,除非删除当前所选内容会导致文本小于文本限制。

备注

在 Win32 (Windows NT 和 Windows 95/98) 中, SetLimitText 将替换此函数。

有关详细信息,请参阅 Windows SDK 中的 EM_LIMITTEXT

示例

// Limit the number of characters to be the maximum number visible.

// Get the text metrics for the edit; needed for the
// average character width.
TEXTMETRIC tm;
CDC *pDC = m_myEdit.GetDC();
pDC->GetTextMetrics(&tm);
m_myEdit.ReleaseDC(pDC);

CRect r;
m_myEdit.GetRect(&r);
m_myEdit.LimitText(r.Width() / tm.tmAveCharWidth);

CEdit:: LineFromChar

调用此函数可检索包含指定字符索引的行的行号。

int LineFromChar(int nIndex = -1) const;

parameters

nIndex
包含编辑控件文本中所需字符的从零开始的索引值,或包含-1。 如果 nIndex 为-1,则它指定当前行,即包含插入符号的行。

返回值

包含由 nIndex 指定的字符索引的行的从零开始的行号。 如果 nIndex 为-1,则返回包含所选内容的第一个字符的行号。 如果未选择任何内容,则返回当前行号。

备注

字符索引是编辑控件开头的字符数。

此成员函数仅由多行编辑控件使用。

有关详细信息,请参阅 Windows SDK 中的 EM_LINEFROMCHAR

示例

// The index of the char to get information on.
int nIndex = 4;
CString strText;

m_myEdit.GetWindowText(strText);
strText = strText.Mid(nIndex, 1);

// Get the text extent of the character.
CDC *pDC = m_myEdit.GetDC();
CSize sz = pDC->GetTextExtent(strText);
m_myEdit.ReleaseDC(pDC);

CPoint pt = m_myEdit.PosFromChar(nIndex);

// Dump the index, character, line number, and character bounds.
TRACE(_T("nIndex = %d, character = %c, line = %d, bounds = ")
      _T("{%d, %d, %d, %d}\r\n"),
      nIndex, strText[0], m_myEdit.LineFromChar(nIndex),
      pt.x /* left */, pt.y /* top */,
      pt.x + sz.cx /* right */, pt.y + sz.cy /* bottom */);

CEdit:: LineIndex

调用此函数可检索多行编辑控件中的行的字符索引。

int LineIndex(int nLine = -1) const;

parameters

N 第
在编辑控件的文本中包含所需行的索引值,或包含-1。 如果 n 第 为-1,则它指定当前行,即包含插入符号的行。

返回值

n 第 中指定的行的字符索引,如果指定的行号大于编辑控件中的行数,则为-1。

备注

字符索引是从编辑控件开始到指定行的字符数。

此成员函数只由多行编辑控件处理。

有关详细信息,请参阅 Windows SDK 中的 EM_LINEINDEX

示例

// The string for replacing.
CString strString(_T("Hi, we're the replacements."));
int nBegin, nEnd;

// Replace the second line, if it exists, of the edit control
// with the text strString.
if ((nBegin = m_myEdit.LineIndex(1)) != -1)
{
   nEnd = nBegin + m_myEdit.LineLength(nBegin);
   m_myEdit.SetSel(nBegin, nEnd);
   m_myEdit.ReplaceSel(strString);
}

CEdit:: LineLength

检索编辑控件中的行的长度。

int LineLength(int nLine = -1) const;

parameters

N 第
要检索其长度的行中的字符的从零开始的索引。 默认值为 -1。

返回值

对于单行编辑控件,返回值为 TCHARs 中的文本在编辑控件中的长度。

对于多行编辑控件,返回值为 TCHARs 中由 n 第 参数指定的行的长度。 对于 ANSI 文本,长度为行中的字节数;对于 Unicode 文本,长度为行中的字符数。 长度不包括行尾的回车符。

如果 n 第 参数大于控件中的字符数,则返回值为零。

如果 n 第 参数为-1,则返回值为包含所选字符的行中未选择的字符数。 例如,如果所选内容从一行的第四个字符到下一行末尾的第八个字符,则返回值为10。 这就是,第一行中有三个字符,接下来是七个字符。

有关 TCHAR 类型的详细信息,请参阅 Windows 数据类型表中的 TCHAR 行。

备注

EM_LINELENGTH消息支持此方法,Windows SDK 中对此进行了介绍。

示例

请参阅 CEdit:: LineIndex的示例。

CEdit:: LineScroll

调用此函数可滚动多行编辑控件的文本。

void LineScroll(
    int nLines,
    int nChars = 0);

parameters

nLines
指定垂直滚动的行数。

nChars
指定要水平滚动的字符位置数。 如果编辑控件具有 ES_RIGHT 或 ES_CENTER 样式,则将忽略此值。

备注

仅多行编辑控件处理此成员函数。

编辑控件不会垂直滚动于编辑控件中的最后一行文本。 如果当前行加上 nLines 指定的行数超过了编辑控件中的总行数,则将调整该值,以便将编辑控件的最后一行滚动到编辑控件窗口的顶部。

LineScroll 可用于水平滚动越过任意行的最后一个字符。

有关详细信息,请参阅 Windows SDK 中的 EM_LINESCROLL

示例

请参阅 CEdit:: GetFirstVisibleLine的示例。

CEdit::P aste

调用此函数可将剪贴板中的数据插入到中的 CEdit 插入点处。

void Paste();

备注

仅当剪贴板包含 CF_TEXT 格式的数据时,才插入数据。

有关详细信息,请参阅 Windows SDK 中的 WM_PASTE

示例

// Replace all of the text with the text in the clipboard.
m_myEdit.SetSel(0, -1);
m_myEdit.Paste();

CEdit::P osFromChar

调用此函数可获取此对象内给定字符 (左上角) 位置 CEdit

CPoint PosFromChar(UINT nChar) const;

parameters

nChar
指定字符的从零开始的索引。

返回值

nChar 指定的字符的左上角的坐标。

备注

字符是通过提供其从零开始的索引值来指定的。 如果 nChar 大于此对象中最后一个字符的索引 CEdit ,则返回值指定紧随此对象中最后一个字符的字符位置的坐标 CEdit

备注

从 Windows 95 和 Windows NT 4.0 开始,此成员函数可用。

有关详细信息,请参阅 Windows SDK 中的 EM_POSFROMCHAR

示例

请参阅 CEdit:: LineFromChar的示例。

CEdit:: ReplaceSel

调用此函数可将编辑控件中的当前选定内容替换为 lpszNewText 指定的文本。

void ReplaceSel(LPCTSTR lpszNewText, BOOL bCanUndo = FALSE);

parameters

lpszNewText
指向以 null 结尾的字符串,该字符串包含替换文本。

bCanUndo
若要指定此函数可以撤消,请将此参数的值设置为 TRUE。 默认值是 FALSE。

备注

仅替换编辑控件中的部分文本。 如果要替换所有文本,请使用 CWnd:: SetWindowText 成员函数。

如果当前没有选定内容,则将在当前光标位置插入替换文本。

有关详细信息,请参阅 Windows SDK 中的 EM_REPLACESEL

示例

请参阅 CEdit:: LineIndex的示例。

CEdit:: SetCueBanner

当控件为空时,将显示的文本设置为 "编辑" 控件中的文本提示或提示。

BOOL SetCueBanner(LPCWSTR lpszText);

BOOL SetCueBanner(
    LPCWSTR lpszText,
    BOOL fDrawWhenFocused = FALSE);

parameters

lpszText
中指向字符串的指针,该字符串包含要在编辑控件中显示的提示。

fDrawWhenFocused
中如果为 FALSE,则当用户在编辑控件中单击并向控件提供焦点时不绘制提示横幅。

如果为 TRUE,则即使控件具有焦点,也会绘制提示横幅。 当用户开始在控件中键入时,提示横幅就会消失。

默认值是 FALSE。

返回值

如果方法成功,则为 TRUE;否则为 FALSE。

备注

此方法发送 Windows SDK 中描述的 EM_SETCUEBANNER 消息。 有关详细信息,请参阅 Edit_SetCueBannerTextFocused 宏。

示例

下面的示例演示了 CEdit:: SetCueBanner 方法。

m_cedit.SetCueBanner(_T("First, enter text here..."), TRUE);

CEdit:: SetHandle

调用此函数可将句柄设置为多行编辑控件将使用的本地内存。

void SetHandle(HLOCAL hBuffer);

parameters

hBuffer
包含本地内存的句柄。 此句柄必须已使用 LMEM_MOVEABLE 标志通过对 LocalAlloc Windows 函数的先前调用创建。 假定内存包含以 null 结尾的字符串。 如果不是这种情况,则分配的内存的第一个字节应设置为0。

备注

然后,编辑控件将使用此缓冲区来存储当前显示的文本,而不是分配其自己的缓冲区。

仅多行编辑控件处理此成员函数。

在应用程序设置新的内存句柄之前,它应使用 GetHandle 成员函数获取当前内存缓冲区的句柄,并使用 Windows 函数释放该内存 LocalFree

SetHandle 清除撤消缓冲区 (CanUndo 成员函数,然后返回 0) 并且 GetModify 成员函数 (内部修改标志,然后返回 0) 。 重绘编辑控件窗口。

只有在创建了具有 DS_LOCALEDIT 样式标志的对话框后,才可以在对话框的多行编辑控件中使用此成员函数。

备注

GetHandle 不会与 Windows 95/98 一起使用。 如果 GetHandle 在 Windows 95/98 中调用,它将返回 NULL。 GetHandle 将按 Windows NT 版本3.51 及更高版本中所述的方式运行。

有关详细信息,请参阅 Windows SDK 中的 EM_SETHANDLELocalAllocLocalFree

示例

// The string to set in the edit control.
CString strString(_T("George Frideric"));

// Initialize the new local handle.
size_t cbSize = (strString.GetLength() + 1) * sizeof(TCHAR);
HLOCAL h = ::LocalAlloc(LHND, cbSize);
LPTSTR lpszText = (LPTSTR)::LocalLock(h);
_tcsncpy_s(lpszText, cbSize / sizeof(TCHAR), strString, _TRUNCATE);
::LocalUnlock(h);

// Free the current text handle of the edit control.
::LocalFree(m_myEdit.GetHandle());

// Set the new text handle.
m_myEdit.SetHandle(h);

CEdit:: SetHighlight

突出显示当前编辑控件中显示的文本范围。

void SetHighlight(
    int ichStart,
    int ichEnd);

parameters

ichStart
中要突出显示的文本范围中第一个字符的从零开始的索引。

ichEnd
中要突出显示的文本范围中最后一个字符的从零开始的索引。

备注

此方法发送 Windows SDK 中描述的 EM_SETHILITE 消息。 此方法发送 Windows SDK 中描述的 EM_SETHILITE 消息。 SetHighlightGetHighlight 仅对 UNICODE 生成启用。

CEdit:: SetLimitText

调用此成员函数以设置此对象的文本限制 CEdit

void SetLimitText(UINT nMax);

parameters

N 每天
新文本限制(字符)。

备注

"文本限制" 是编辑控件可以接受的最大文本量(字符数)。

更改文本限制仅限制用户可输入的文本。 它不会影响编辑控件中已有的任何文本,也不会影响中的 SetWindowText 成员函数复制到编辑控件中的文本长度 CWnd 。 如果应用程序使用 SetWindowText 函数将更多的文本放入编辑控件中,而不是调用中指定的 LimitText ,则用户可以删除编辑控件中的任何文本。 但是,文本限制会阻止用户将现有文本替换为新文本,除非删除当前所选内容会导致文本小于文本限制。

此函数替换 Win32 中的 LimitText

有关详细信息,请参阅 Windows SDK 中的 EM_SETLIMITTEXT

示例

请参阅 CEditView:: GetEditCtrl的示例。

CEdit:: SetMargins

调用此方法可设置此编辑控件的左边距和右边距。

void SetMargins(
    UINT nLeft,
    UINT nRight);

parameters

nLeft
新左边距的宽度(以像素为单位)。

nRight
新右边缘的宽度(以像素为单位)。

备注

备注

从 Windows 95 和 Windows NT 4.0 开始,此成员函数可用。

有关详细信息,请参阅 Windows SDK 中的 EM_SETMARGINS

示例

请参阅 CEditView:: GetEditCtrl的示例。

CEdit:: SetModify

调用此函数可设置或清除编辑控件的修改标志。

void SetModify(BOOL bModified = TRUE);

parameters

bModified
如果值为 TRUE,则表示文本已修改,值为 FALSE 表示未修改该文本。 默认情况下,已修改的标志设置为。

备注

修改后的标志指示编辑控件中的文本是否已被修改。 每当用户更改文本时,将自动设置该设置。 可以通过 GetModify 成员函数检索其值。

有关详细信息,请参阅 Windows SDK 中的 EM_SETMODIFY

示例

请参阅 CEdit:: GetModify的示例。

CEdit:: SetPasswordChar

调用此函数可设置或删除用户键入文本时在编辑控件中显示的密码字符。

void SetPasswordChar(TCHAR ch);

parameters

ch
指定要显示的字符,以代替用户键入的字符。 如果 ch 为0,则显示用户键入的实际字符。

备注

如果设置了密码字符,则会为用户键入的每个字符显示该字符。

此成员函数对于多行编辑控件不起作用。

SetPasswordChar调用成员函数时, CEdit 将使用 ch 指定的字符重绘所有可见字符。

如果编辑控件是使用 ES_PASSWORD 样式创建的,则默认密码字符将设置为) 星号 ( * 。 如果 SetPasswordCharch 设置为0的情况下调用,则删除此样式。

有关详细信息,请参阅 Windows SDK 中的 EM_SETPASSWORDCHAR

示例

// Turn off the password mode.
m_myEdit.SetPasswordChar(0);
ASSERT(!(m_myEdit.GetStyle() & ES_PASSWORD));

CEdit:: SetReadOnly

调用此函数可设置编辑控件的只读状态。

BOOL SetReadOnly(BOOL bReadOnly = TRUE);

parameters

bReadOnly
指定是设置还是删除编辑控件的只读状态。 如果值为 TRUE,则将状态设置为只读;如果值为 FALSE,则将状态设置为读/写。

返回值

如果操作成功,则为非零; 如果发生错误,则为0。

备注

可以通过测试CWnd:: GetStyle的返回值中的ES_READONLY标志来找到当前设置。

有关详细信息,请参阅 Windows SDK 中的 EM_SETREADONLY

示例

// Set the edit control to be read-only.
m_myEdit.SetReadOnly(TRUE);
ASSERT(m_myEdit.GetStyle() & ES_READONLY);

CEdit:: SetRect

调用此函数可使用指定的坐标设置矩形的尺寸。

void SetRect(LPCRECT lpRect);

parameters

lpRect
指向 RECT 结构或对象,该结构或 CRect 对象指定格式设置矩形的新尺寸。

备注

仅多行编辑控件处理此成员。

用于 SetRect 设置多行编辑控件的格式设置矩形。 格式设置矩形是文本的限制矩形,它与编辑控件窗口的大小无关。 首次创建编辑控件时,格式设置矩形与编辑控件窗口的工作区相同。 使用 SetRect 成员函数,应用程序可以使格式设置矩形大于或小于编辑控件窗口。

如果编辑控件没有滚动条,则在设置格式设置的矩形比窗口大时,将会对文本进行剪裁,而不会换行。 如果编辑控件包含边框,则格式设置矩形会按边框大小减小。 如果调整由成员函数返回的矩形,则在将 GetRect 该矩形传递到之前,必须先删除边框的大小 SetRect

SetRect调用时,还会重新格式化并重新显示编辑控件的文本。

有关详细信息,请参阅 Windows SDK 中的 EM_SETRECT

示例

// Flag indicating whether to redraw the edit control.
bool fRedraw = TRUE;

CRect r;

m_myEdit.GetRect(&r);

// Reduce the formatting rect of the edit control by
// 10 pixels on each side.
if ((r.Width() > 20) && (r.Height() > 20))
{
   r.DeflateRect(10, 10);

   if (fRedraw)
      m_myEdit.SetRect(&r);
   else
      m_myEdit.SetRectNP(&r);
}

CEdit:: SetRectNP

调用此函数可设置多行编辑控件的格式设置矩形。

void SetRectNP(LPCRECT lpRect);

parameters

lpRect
指向 RECT CRect 指定矩形的新尺寸的结构或对象。

备注

格式设置矩形是文本的限制矩形,它与编辑控件窗口的大小无关。

SetRectNPSetRect 成员函数相同,只不过不重绘编辑控件窗口。

首次创建编辑控件时,格式设置矩形与编辑控件窗口的工作区相同。 通过调用 SetRectNP 成员函数,应用程序可以使格式设置矩形大于或小于编辑控件窗口。

如果编辑控件没有滚动条,则在设置格式设置的矩形比窗口大时,将会对文本进行剪裁,而不会换行。

仅多行编辑控件处理此成员。

有关详细信息,请参阅 Windows SDK 中的 EM_SETRECTNP

示例

请参阅 CEdit:: SetRect的示例。

CEdit:: SetSel

调用此函数可选择编辑控件中的一系列字符。

void SetSel(
    DWORD dwSelection,
    BOOL bNoScroll = FALSE);

void SetSel(
    int nStartChar,
    int nEndChar,
    BOOL bNoScroll = FALSE);

parameters

dwSelection
指定低序位字中的起始位置和高位字中的结束位置。 如果低序位字为0,高序位字为-1,则将选中 "编辑" 控件中的所有文本。 如果低序位字为-1,则将删除当前选择的内容。

bNoScroll
指示插入符号是否应滚动到视图中。 如果为 FALSE,则在视图中滚动插入符号。 如果为 TRUE,则不滚动插入符号。

nStartChar
指定起始位置。 如果 nStartChar 为0, nEndChar 为-1,则将选中 "编辑" 控件中的所有文本。 如果 nStartChar 为-1,则将删除当前选择的内容。

nEndChar
指定结束位置。

备注

有关详细信息,请参阅 Windows SDK 中的 EM_SETSEL

示例

请参阅 CEdit:: GetSel的示例。

CEdit:: SetTabStops

调用此函数可在多行编辑控件中设置制表位。

void SetTabStops();
BOOL SetTabStops(const int& cxEachStop);

BOOL SetTabStops(
    int nTabStops,
    LPINT rgTabStops);

parameters

cxEachStop
指定要在每个 cxEachStop 对话框单位设置制表位。

nTabStops
指定包含在 rgTabStops 中的制表位的数目。 此数字必须大于1。

rgTabStops
指向指定对话框单位中的制表位的无符号整数数组。 对话单位为水平或垂直距离。 一个水平对话框单位等于当前 "对话框基本宽度单位" 的四分之一,1个垂直对话单位等于当前对话框基本高度单位的八分之一。 对话框基本单位根据当前系统字体的高度和宽度计算。 GetDialogBaseUnitsWindows 函数以像素为单位返回当前的对话框基本单位。

返回值

如果设置了选项卡,则为非零值;否则为0。

备注

当文本复制到多行编辑控件时,文本中的任何制表符都将导致生成空间,直到下一个制表位。

若要将制表位设置为默认大小32对话单位,请调用此成员函数的无参数版本。 若要将制表位设置为32以外的其他大小,请使用 cxEachStop 参数调用该版本。 若要将制表位设置为大小数组,请使用具有两个参数的版本。

此成员函数只由多行编辑控件处理。

SetTabStops 不会自动重绘编辑窗口。 如果更改了编辑控件中已有文本的制表位,请调用 CWnd:: InvalidateRect 以重新绘制编辑窗口。

有关详细信息,请参阅 Windows SDK 中的 EM_SETTABSTOPSGetDialogBaseUnits

示例

请参阅 CEditView:: SetTabStops的示例。

CEdit:: ShowBalloonTip

显示与当前编辑控件关联的气球状提示。

BOOL ShowBalloonTip(PEDITBALLOONTIP pEditBalloonTip);

BOOL ShowBalloonTip(
    LPCWSTR lpszTitle,
    LPCWSTR lpszText,
    INT ttiIcon = TTI_NONE);

parameters

pEditBalloonTip
中指向 EDITBALLOONTIP 结构的指针,该结构描述了气球提示。

lpszTitle
中指向一个 Unicode 字符串的指针,该字符串包含气球状提示的标题。

lpszText
中指向包含气球提示文本的 Unicode 字符串的指针。

ttiIcon
中一个 INT ,指定与气球状提示相关联的图标类型。 默认值为 TTI_NONE。 有关详细信息,请参阅 ttiIcon EDITBALLOONTIP 结构的成员。

返回值

如果此方法成功,则为 TRUE;否则为 FALSE。

备注

此函数发送 Windows SDK 中描述的 EM_SHOWBALLOONTIP 消息。 有关详细信息,请参阅 Edit_ShowBalloonTip 宏。

示例

下面的代码示例定义了一个 m_cedit 用于访问当前编辑控件的变量。 此变量将在下一个示例中使用。

public:
// Variable to access the edit control.
CEdit m_cedit;

示例

下面的代码示例显示了编辑控件的气球提示。 CEdit:: ShowBalloonTip方法指定标题和气球提示文本。

m_cedit.ShowBalloonTip(
    _T("CEdit Balloon Tip"), // title
    _T("Here's a tip!"),     // text
    TTI_INFO);

CEdit:: Undo

调用此函数可撤消最后一个编辑控件操作。

BOOL Undo();

返回值

对于单行编辑控件,返回值始终为非零值。 对于多行编辑控件,如果撤消操作成功,则返回值为非零; 如果撤消操作失败,则返回0。

备注

撤消操作还可以撤消。 例如,你可以在首次调用时还原已删除的文本 Undo 。 只要没有干预编辑操作,就可以使用第二次调用删除文本 Undo

有关详细信息,请参阅 Windows SDK 中的 EM_UNDO

示例

// Undo the last operation, if possible.
if (m_myEdit.CanUndo())
   m_myEdit.Undo();

请参阅

MFC 示例 CALCDRIV
MFC 示例 CMNCTRL2
CWnd 类
层次结构图
CWnd 类
CButton 类
CComboBox 类
CListBox 类
CScrollBar 类
CStatic 类
CDialog 类