共用方式為


CEdit 類別

提供 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 ,請參閱 控制項

繼承階層架構

CObject

CCmdTarget

CWnd

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
指定編輯控制項的樣式。 將編輯樣式 的任何組合 套用至 控制項。

矩形
指定編輯控制項的大小和位置。 可以是 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 SetHandle 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);

參數

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 訊息。 SetHighlightGetHighlight 目前僅針對 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 支援編輯控制項。 如果使用者32.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 訊息。 和 SetHighlightGetHighlight 都僅針對 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 物件。

備註

格式化矩形是文字的限制矩形,與編輯控制項視窗的大小無關。

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);

參數

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 類別