int CharFromPos(CPoint pt) const;
此 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();
可通过调用 Undo 成员函数撤消 Clear
执行的删除。
若要删除当前所选内容并将已删除的内容放入剪贴板,请调用 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);
dwStyle
指定编辑控件的样式。 将编辑样式的任意组合应用于控件。
指定编辑控件的大小和位置。 可以是 CRect
对象或 RECT
结构。
pParentWnd
指定编辑控件的父窗口(通常为 CDialog
)。 不得为 NULL。
指定编辑控件的 ID。
如果初始化成功,则为非零值;否则为 0。
请分两步构造 CEdit
对象。 首先调用 CEdit
构造函数,然后调用 Create
,这会创建 Windows 编辑控件并将其附加到 CEdit
对象。
执行 Create
时,Windows 会将 WM_NCCREATE、WM_NCCALCSIZE、WM_CREATE 和 WM_GETMINMAXINFO 消息发送到编辑控件。
默认情况下,这些消息由 CWnd
基类中的 OnNcCreate、OnNcCalcSize、OnCreate 和 OnGetMinMaxInfo 成员函数处理。 若要扩展默认消息处理,请从 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();
可通过调用 Undo 成员函数撤消 Cut
执行的删除。
若要删除当前选定内容而不将已删除的文本放入剪贴板,请调用 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();
编辑控件现在无法撤消最后一个操作。 每当可撤消编辑控件中的操作时,都会设置撤消标志。
每当调用 SetWindowText 或 SetHandleCWnd
成员函数时,都会自动清除撤消标志。
有关详细信息,请参阅 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);
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;
lpszText
[out] 指向包含提示文本的字符串的指针。
cchText
[in] 可接收的字符数。 此数字包括终止 NULL 字符。
对于第一个重载,如果方法成功,则为 TRUE;否则为 FALSE。
对于第二个重载,如果方法成功,则为包含提示文本的 CString;否则为空字符串 ("")。
此方法将发送 EM_GETCUEBANNER 消息,如 Windows SDK 中所述。 有关详细信息,请参阅 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
仅由多行编辑控件处理。
仅当在设置了 DS_LOCALEDIT 样式标志的情况下创建对话框时,才在对话框中为多行编辑控件调用 GetHandle
。 如果未设置 DS_LOCALEDIT 样式,仍会收到非零返回值,但无法使用返回的值。
GetHandle
不适用于 Windows 95/98。 如果在 Windows 95/98 中调用 GetHandle
,它将返回 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;
pichStart
[out] 突出显示的文本范围中第一个字符的从零开始的索引。
pichEnd
[out] 突出显示的文本范围中最后一个字符的从零开始的索引。
如果此方法成功,则返回 TRUE;否则返回 FALSE。
此方法将发送 EM_GETHILITE 消息,如 Windows SDK 中所述。 SetHighlight
和 GetHighlight
当前都仅对 UNICODE 版本启用。
CEdit::GetLimitText
调用此成员函数以获取此 CEdit
对象的文本限制。
UINT GetLimitText() const;
此 CEdit
对象的当前文本限制(以 TCHAR 为单位)。
文本限制是编辑控件可接受的最大文本量(以 TCHAR 为单位)。
此成员函数从 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;
nIndex
指定要从多行编辑控件中检索的行号。 行号从零开始;值 0 指定第一行。 单行编辑控件会忽略此参数。
lpszBuffer
指向接收行副本的缓冲区。 缓冲区的第一个字必须指定可复制到缓冲区的最大 TCHAR 数。
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 确定默认密码字符。 清单或 InitCommonControlsEx 方法确定哪个 DLL 支持编辑控件。 如果 user32.dll 支持编辑控件,则默认密码字符为 ASTERISK ('*', U+002A)。 如果 comctl32.dll 版本 6 支持编辑控件,则默认字符为 BLACK CIRCLE ('●', U+25CF)。 若要详细了解哪些 DLL 和版本支持通用控件,请参阅 Shell 和公共控件版本。
此方法将发送 EM_GETPASSWORDCHAR 消息,如 Windows SDK 中所述。
// 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;
lpRect
指向接收格式化矩形的 RECT
结构。
格式化矩形是文本的限制矩形,与编辑控件窗口的大小无关。
SetRect 和 SetRectNP 成员函数可修改多行编辑控件的格式化矩形。
有关详细信息,请参阅 Windows SDK 中的 EM_GETRECT。
请参阅 CEdit::LimitText 的示例。
CEdit::GetSel
调用此函数,使用返回值或参数获取编辑控件中当前所选内容(如有)的起始和结束字符位置。
DWORD GetSel() const;
void GetSel(
int& nStartChar,
int& nEndChar) const;
nStartChar
对将接收当前选定内容中第一个字符位置的整数的引用。
nEndChar
对将接收当前选定内容结束后第一个未选定字符位置的整数的引用。
返回 DWORD 的版本会返回一个值,该值包含低位字中的起始位置,以及在高位字中所选内容结束后第一个未选定字符的位置。
有关详细信息,请参阅 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。
此函数将发送 EM_HIDEBALLOONTIP 消息,如 Windows SDK 中所述。
CEdit::LimitText
调用此函数以限制用户可在编辑控件中输入的文本长度。
void LimitText(int nChars = 0);
nChars
指定用户可输入的文本长度(以 TCHAR 为单位)。 如果此参数为 0,则文本长度设置为 UINT_MAX 字节。 此选项为默认行为。
更改文本限制仅会限制用户可输入的文本。 它不会影响编辑控件中已有的任何文本,也不会影响 CWnd
中的 SetWindowText 成员函数复制到编辑控件的文本长度。 如果应用程序使用 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;
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;
nLine
包含编辑控件文本中所需行的索引值,或者包含 -1。 如果 nLine 为 -1,则指定当前行,即包含脱字号的行。
返回 nLine 中指定的行的字符索引;如果指定的行数大于编辑控件中的行数,则返回 -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;
nLine
要检索其长度的行中的字符的从零开始的索引。 默认值为 -1。
对于单行编辑控件,返回值是编辑控件中文本的长度(以 TCHAR 为单位)。
对于多行编辑控件,返回值是 nLine 指定的行的长度(以 TCHAR 为单位)。 对于 ANSI 文本,长度是行中的字节数;对于 Unicode 文本,长度是行中的字符数。 长度不包括行末尾的回车符。
如果 nLine 参数大于控件中的字符数,则返回值为零。
如果 nLine 参数为 -1,则返回值是包含选定字符的行中的未选中字符数。 例如,如果所选内容从一行的第 4 个字符扩展到下一行末尾的第 8 个字符,则返回值为 10。 也就是说,第一行有 3 个字符,下一行有 7 个字符。
有关 TCHAR 类型的详细信息,请参阅 Windows 数据类型中的表中的 TCHAR 行。
此方法由 EM_LINELENGTH 消息提供支持,如 Windows SDK 中所述。
请参阅 CEdit::LineIndex 的示例。
调用此函数以滚动多行编辑控件的文本。
void LineScroll(
int nLines,
int nChars = 0);
nLines
指定要垂直滚动的行数。
nChars
指定要水平滚动的字符位置数。 如果编辑控件具有 ES_RIGHT 或 ES_CENTER 样式,则忽略此值。
此成员函数仅由多行编辑控件处理。
编辑控件不会垂直滚动超出编辑控件中的最后一行文本。 如果当前行加上 nLines 指定的行数超过编辑控件中的行总数,则会调整该值,以便编辑控件的最后一行滚动到编辑控件窗口的顶部。
可使用 LineScroll
水平滚动超过任何行的最后一个字符。
有关详细信息,请参阅 Windows SDK 中的 EM_LINESCROLL。
请参阅 CEdit::GetFirstVisibleLine 的示例。
CEdit::Paste
调用此函数,将剪贴板中的数据插入插入点处的 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::PosFromChar
调用此函数可获取此 CEdit
对象中给定字符的位置(左上角)。
CPoint PosFromChar(UINT nChar) const;
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);
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);
lpszText
[in] 指向字符串的指针,其中包含要在编辑控件中显示的提示。
fDrawWhenFocused
[in] 如果为 FALSE,则当用户在编辑控件中单击并将焦点置于该控件时,不会绘制提示横幅。
如果为 TRUE,则即使控件具有焦点,也会绘制提示横幅。 当用户开始在控件中键入内容时,提示横幅将消失。
默认值是 FALSE。
如果此方法成功,则为 TRUE;否则为 FALSE。
此方法将发送 EM_SETCUEBANNER 消息,如 Windows SDK 中所述。 有关详细信息,请参阅 Edit_SetCueBannerTextFocused 宏。
下面的示例演示了 CEdit::SetCueBanner 方法。
m_cedit.SetCueBanner(_T("First, enter text here..."), TRUE);
CEdit::SetHandle
调用此函数,将句柄设置为多行编辑控件要使用的本地内存。
void SetHandle(HLOCAL hBuffer);
hBuffer
包含本地内存的句柄。 必须已使用 LMEM_MOVEABLE 标志由先前对 Windows 函数 LocalAlloc 的调用来创建此句柄。 假定内存包含以 null 结尾的字符串。 如果并非如此,则分配的内存的第一个字节应设置为 0。
编辑控件随后将使用此缓冲区来存储当前显示的文本,而不是分配其自己的缓冲区。
此成员函数仅由多行编辑控件处理。
在应用程序设置新的内存句柄之前,它应使用 GetHandle 成员函数获取当前内存缓冲区的句柄,并使用 Windows 函数 LocalFree
释放该内存。
SetHandle
会清除撤消缓冲区(CanUndo 成员函数随后返回 0)和内部修改标志(GetModify 成员函数随后返回 0)。 会重新绘制编辑控制窗口。
只有在设置了 DS_LOCALEDIT 样式标志的情况下创建对话框时,才能在对话框中的多行编辑控件中使用此成员函数。
GetHandle
不适用于 Windows 95/98。 如果在 Windows 95/98 中调用 GetHandle
,它将返回 NULL。 GetHandle
将按 Windows NT 3.51 及更高版本中所述工作。
有关详细信息,请参阅 Windows SDK 中的 EM_SETHANDLE、LocalAlloc 和 LocalFree。
// 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);
ichStart
[in] 要突出显示的文本范围中第一个字符的从零开始的索引。
ichEnd
[in] 要突出显示的文本范围中最后一个字符的从零开始的索引。
此方法将发送 EM_SETHILITE 消息,如 Windows SDK 中所述。 此方法将发送 EM_SETHILITE 消息,如 Windows SDK 中所述。 SetHighlight
和 GetHighlight
均仅对 UNICODE 版本启用。
CEdit::SetLimitText
调用此成员函数以设置此 CEdit
对象的文本限制。
void SetLimitText(UINT nMax);
新的文本限制(以字符数为单位)。
文本限制是编辑控件可接受的最大文本量(以字符数为单位)。
更改文本限制仅会限制用户可输入的文本。 它不会影响编辑控件中已有的任何文本,也不会影响 CWnd
中的 SetWindowText 成员函数复制到编辑控件的文本长度。 如果应用程序使用 SetWindowText
函数将更多文本放置在编辑控件中,而不是在对 LimitText
的调用中指定,则用户可以删除编辑控件中的任何文本。 但是,除非删除当前选定内容会导致文本低于文本限制,否则文本限制将阻止用户使用新文本替换现有文本。
此函数会替换 Win32 中的 LimitText。
有关详细信息,请参阅 Windows SDK 中的 EM_SETLIMITTEXT。
请参阅 CEditView::GetEditCtrl 的示例。
CEdit::SetMargins
调用此方法可设置此编辑控件的左右边距。
void SetMargins(
UINT nLeft,
UINT nRight);
nLeft
新的左边距的宽度(以像素为单位)。
nRight
新的右边距的宽度(以像素为单位)。
此成员函数从 Windows 95 和 Windows NT 4.0 开始可用。
有关详细信息,请参阅 Windows SDK 中的 EM_SETMARGINS。
请参阅 CEditView::GetEditCtrl 的示例。
CEdit::SetModify
调用此函数可设置或清除编辑控件已修改的标志。
void SetModify(BOOL bModified = TRUE);
bModified
TRUE 值表示文本已修改,FALSE 值表示文本未修改。 默认情况下,将设置已修改的标志。
已修改的标志指示是否修改了编辑控件中的文本。 每当用户更改文本时,都会自动设置该标志。 可使用 GetModify 成员函数检索其值。
有关详细信息,请参阅 Windows SDK 中的 EM_SETMODIFY。
请参阅 CEdit::GetModify 的示例。
CEdit::SetPasswordChar
调用此函数以设置或移除当用户键入文本时在编辑控件中显示的密码字符。
void SetPasswordChar(TCHAR ch);
指定要显示的字符(并非用户键入的字符)。 如果 ch 为 0,则显示用户键入的实际字符。
设置密码字符时,将为用户键入的每个字符显示该字符。
此成员函数对多行编辑控件没有影响。
调用 SetPasswordChar
成员函数时,CEdit
将使用 ch 指定的字符重新绘制所有可见字符。
如果使用 ES_PASSWORD 样式创建编辑控件,则默认密码字符设置为星号 (*)。 如果在 ch 设置为 0 的情况下调用 SetPasswordChar
,则会删除此样式。
有关详细信息,请参阅 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);
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);
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);
m_myEdit.SetRectNP(&r);
CEdit::SetRectNP
调用此函数以设置多行编辑控件的格式化矩形。
void SetRectNP(LPCRECT lpRect);
lpRect
指向 RECT
结构或 CRect
对象,它指定矩形的新维度。
格式化矩形是文本的限制矩形,与编辑控件窗口的大小无关。
SetRectNP
与 SetRect
成员函数相同,但没有重新绘制编辑控件窗口。
首次创建编辑控件时,格式化矩形与编辑控件窗口的工作区相同。 通过调用 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);
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);
cxEachStop
指定在每个 cxEachStop 对话框单位中设置制表位。
nTabStops
指定 rgTabStops 中包含的制表位数。 该数字必须大于 1。
rgTabStops
指向一个无符号整数数组,它指定对话框单位中的制表位。 对话框单位是一个水平或垂直的距离。 一个水平对话框单位等于当前对话框基本宽度单位的四分之一,一个垂直对话框单位等于当前对话框基本高度单位的八分之一。 对话框基本单位根据当前系统字体的高度和宽度计算。 GetDialogBaseUnits
Windows 函数以像素为单位返回当前对话框基本单位。
如果设置了制表符,则为非零值;否则为 0。
将文本复制到多行编辑控件时,文本中的任何制表符都会导致生成空间,直到下一个制表位为止。
要将制表位设置为默认大小(即 32 个对话框单位),请调用此成员函数的无参数版本。 要将制表位设置为 32 以外的大小,请调用具有 cxEachStop 参数的版本。 要将制表位设置为大小数组,请使用带有两个参数的版本。
此成员函数仅由多行编辑控件处理。
SetTabStops
不会自动重新绘制编辑窗口。 如果更改编辑控件中已有文本的制表位,请调用 CWnd::InvalidateRect 来重新绘制编辑窗口。
有关详细信息,请参阅 Windows SDK 中的 EM_SETTABSTOPS 和 GetDialogBaseUnits。
请参阅 CEditView::SetTabStops 的示例。
CEdit::ShowBalloonTip
显示与当前编辑控件关联的气球状提示。
BOOL ShowBalloonTip(PEDITBALLOONTIP pEditBalloonTip);
BOOL ShowBalloonTip(
LPCWSTR lpszTitle,
LPCWSTR lpszText,
INT ttiIcon = TTI_NONE);
pEditBalloonTip
[in] 指向描述气球状提示的 EDITBALLOONTIP 结构的指针。
lpszTitle
[in] 指向包含气球状提示标题的 Unicode 字符串的指针。
lpszText
[in] 指向包含气球状提示文本的 Unicode 字符串的指针。
ttiIcon
[in] 一个 INT,它指定要与气球状提示关联的图标类型。 默认值为 TTI_NONE。 有关详细信息,请参阅 EDITBALLOONTIP 结构的 ttiIcon
成员。
如果此方法成功,则返回 TRUE;否则返回 FALSE。
此函数将发送 EM_SHOWBALLOONTIP 消息,如 Windows SDK 中所述。 有关详细信息,请参阅 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 类