提供 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成員函式 SetWindowText 和 GetWindowText,該函式會設定或取得編輯控件的整個內容,即使它是多行控件也一樣。 多行控件中的文字行會以 『\r\n' 字元序列分隔。 此外,如果編輯控件是多行,請呼叫成員函式 GetLine、SetSel、GetSel 和 ReplaceSel 來取得和設定控件文字的一部分。CEdit
如果您想要處理由編輯控件傳送給其父系的 Windows 通知訊息(通常是衍生自 CDialog的類別),請將訊息對應專案和訊息處理程式成員函式新增至每個訊息的父類別。
每個訊息對應項目採用下列格式:
ON_NOTIFICATION(id, memberFxn )
其中 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 物件,它會自動終結。 如果您使用 函式在堆積new上建立 CEdit 物件,則必須在使用者終止 Windows 編輯控件時呼叫 delete 對象來終結它。 如果您在物件中 CEdit 配置任何記憶體,請覆寫 CEdit 解構函式以處置配置。
若要修改編輯控件中的特定樣式(例如ES_READONLY),您必須將特定訊息傳送至控件,而不是使用 ModifyStyle。 請參閱 在 Windows SDK 中編輯控件樣式 。
如需 的詳細資訊 CEdit,請參閱 控件。
繼承階層架構
CEdit
需求
標題: afxwin.h
CEdit::CanUndo
呼叫此函式,以判斷是否可以復原最後一個編輯作業。
BOOL CanUndo() const;
傳回值
如果最後一個編輯作業可由成員函式的呼叫 Undo 復原,則為非零;如果無法復原,則為0。
備註
如需詳細資訊,請參閱 Windows SDK 中的EM_CANUNDO 。
範例
請參閱 CEdit::Undo 的範例。
CEdit::CEdit
建構 CEdit 物件。
CEdit();
備註
使用 [建立] 建構 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;
參數
pt
這個 CEdit 物件工作區中點的座標。
傳回值
低序 WORD 中的字元索引,以及高階 WORD 中的行索引。
備註
注意
從 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執行的刪除。
若要刪除目前的選取範圍,並將已刪除的內容放入剪貼簿中,請呼叫 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
指定編輯控制件的樣式。 將編輯樣式的任何組合套用至 控制項。
rect
指定編輯控制元件的大小和位置。 可以是 CRect 對象或 RECT 結構。
pParentWnd
指定編輯控制件的父視窗 (通常是 CDialog)。 它不得為 NULL。
nID
指定編輯控制件的識別碼。
傳回值
如果初始化成功,則為非零;否則為 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 Always
通常WS_VISIBLE
很少WS_DISABLED
WS_GROUP群組控件
WS_TABSTOP 若要在定位順序中包含編輯控制項
範例
// 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執行的刪除。
若要刪除目前的選取範圍,而不將已刪除的文字放入剪貼簿中,請呼叫 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 ,否則為空字串串 (“)。
備註
這個方法會 傳送 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 只會由多行編輯控件處理。
只有在建立具有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。
備註
這個方法會傳送 windows SDK 中所述的EM_GETHILITE 訊息。 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;
傳回值
低序 WORD 中左邊界的寬度,以及高階 WORD 中右邊界的寬度。
備註
邊界會以像素為單位來測量。
注意
從 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 和版本支援通用控件的詳細資訊,請參閱 殼層和通用控件版本。
這個方法會 傳送 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;
參數
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。
備註
此函式會 傳送 windows SDK 中所述的 EM_HIDEBALLOONTIP訊息。
CEdit::LimitText
呼叫此函式,以限制用戶可進入編輯控件的文字長度。
void LimitText(int nChars = 0);
參數
nChars
指定使用者可以輸入之文字的長度(以 TCHAR 為單位)。 如果此參數為 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;
參數
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,則傳回值是包含所選取字元之行中未選取的字元數。 例如,如果選取範圍從第四行的第四個字元延伸至下一行結尾的第八個字元,則傳回值為 10。 也就是說,第一行有三個字元,下一行有七個字元。
如需 TCHAR 類型的詳細資訊,請參閱 Windows 數據類型數據表中的 TCHAR 數據列。
備註
EM_LINELENGTH訊息支援此方法,如 Windows SDK 中所述。
範例
請參閱 CEdit::LineIndex 的範例。
CEdit::LineScroll
呼叫此函式以捲動多行編輯控件的文字。
void LineScroll(
int nLines,
int nChars = 0);
參數
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;
參數
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。
備註
此方法會 傳送 windows SDK 中所述的EM_SETCUEBANNER 訊息。 如需詳細資訊,請參閱 Edit_SetCueBannerTextFocused 巨集。
範例
下列範例示範 CEdit::SetCueBanner 方法。
m_cedit.SetCueBanner(_T("First, enter text here..."), TRUE);
CEdit::SetHandle
呼叫此函式,將句柄設定為多行編輯控件將使用的本機記憶體。
void SetHandle(HLOCAL hBuffer);
參數
hBuffer
包含本機記憶體的句柄。 這個句柄必須由先前使用 LMEM_MOVEABLE 旗標呼叫 LocalAlloc Windows 函式所建立。 記憶體假設包含以 Null 結尾的字串。 如果情況並非如此,則配置記憶體的第一個字節應該設定為0。
備註
編輯控件接著會使用此緩衝區來儲存目前顯示的文字,而不是配置自己的緩衝區。
這個成員函式只會由多行編輯控件處理。
在應用程式設定新的記憶體句柄之前,它應該使用 GetHandle 成員函式來取得目前記憶體緩衝區的 LocalFree 句柄,並使用 Windows 函式釋放該記憶體。
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]要反白顯示之文字範圍中最後一個字元之以零起始的索引。
備註
此方法會 傳送 windows SDK 中所述的EM_SETHILITE 訊息。 此方法會 傳送 windows SDK 中所述的EM_SETHILITE 訊息。 和 SetHighlight GetHighlight 都僅針對 UNICODE 組建啟用。
CEdit::SetLimitText
呼叫這個成員函式來設定這個 CEdit 物件的文字限制。
void SetLimitText(UINT nMax);
參數
nMax
新的文字限制,以字元為單位。
備註
文字限制是編輯控制項可以接受的文字數量上限,以字元為單位。
變更文字限制只會限制使用者可以輸入的文字。 它不會影響任何已經在編輯控件中的文字,也不會影響 由SetWindowText成員函CWnd式複製到編輯控件的文字長度。 如果應用程式使用函 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
指定要用來取代使用者輸入之字元的字元。 如果 ch 為 0,則會顯示使用者輸入的實際字元。
備註
設定密碼字元時,會針對使用者輸入的每個字元顯示該字元。
這個成員函式不會影響多行編輯控制項。
SetPasswordChar呼叫成員函式時,CEdit將會使用ch所指定的字元來重新繪製所有可見字元。
如果使用ES_PASSWORD樣式建立編輯控件,則默認密碼字元會設定為星號 (*)。 如果在 SetPasswordChar ch 設定為 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);
參數
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);
else
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
指向以對話框單位指定製表位之不帶正負號整數的陣列。 對話框單位是水準或垂直距離。 一個水準對話框單位等於目前對話基底寬度單位的四分之一,而 1 個垂直對話框單位等於目前對話基底高度單位的 18 個。 對話方塊基本單位是根據目前系統字型的高度和寬度計算。 Windows 函 GetDialogBaseUnits 式會以像素為單位傳回目前的對話框基底單位。
傳回值
如果已設定索引標籤,則為非零;否則為 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。 如需詳細資訊,請參閱 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 類別