CEdit控件 詳細介紹

CEdit類提供了Windows 編輯控件中的功能。編輯控件是一個子窗口矩形,用戶可以向其中輸入文本。可以通過對話模板或直接從代碼中創建一個編輯控件。在兩種情形下,首先調用CEdit構造程序構造CEdit對象,再調用Create成員函數創建Windows 編輯控件並將其與CEdit對象連接。構造在CEdit的派生類中可以單步實現。爲派生類編寫構造程序並從構造程序中調用Create。CEdit從CWnd 繼承了重要的功能,要在CEdit對象中設置或獲取文本,使用CWnd 成員函數SetWindowText和GetWindowText,可以設置和得到編輯控件的全部內容,即使它是一個多行控件。如果編輯控件是多行的,使用CEdit成員函數GetLine,GetSel,GetSel和ReplaceSel來獲取和寫入控件的部分文本。

如果要處理編輯控件發往其父類(通常是一個CDialog派生類)的通知消息,則向父類中爲每一消息添加一個消息映射入口和消息處理成員函數。各消息映射入口可採用如下形式:

ON_Notification(id,memberFxn)

其中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    當前輸入超過了爲編輯控件指定的數目,並作截尾處理。當編輯控件不具有

ON_EN_HSCROLL風格且要輸入的字符會超過編輯控件的寬度時,發送消息。當編輯控件

不具有ON_EN_VSCROLL風格且要輸入的字符會超過編輯控件的高度時,也會發送消息。

ON_EN_SETFOCUS   編輯控件獲得焦點。

ON_EN_UPDATE     編輯控件將要顯示變動的文本。在控件對文本格式化之後但在顯示文本之前發送消息,

以便在必要時改變窗口尺寸。

ON_EN_VSCROLL    用戶單擊了編輯控件中的垂直滾動條,父窗口在屏幕更新之前被通知。

如果在對話框內創建CEdit對象,CEdit對象在用戶關閉對話框時自動被刪除。如果使用對話框編輯器從對話資源中創建CEdit對象,CEdit對象在用戶關閉對話框時自動被刪除。如果在窗口內創建CEdit對象,也需要刪除它。如果在棧上創建CEdit對象,它被自動刪除。如果使用new函數在堆上創建CEdit對象,在用戶中止編輯控件時,必須對其調用delete來刪除它。如果在CEdit對象中分配存儲空間,覆蓋CEdit析構程序來處理分配情況。關於CEdit的更多信息,請參閱聯機文檔“Visual C++程序員指南”中的“控件主題”。

#include<afxwin.h>

1       CEdit類的成員

1.1  構造函數

CEdit    構造一個CEdit控件對象

Create   創建一個Windows編輯控件,並將其與CEdit對象連接CEdit

屬性

CanUndo        決定一個編輯控件操作是否能夠被撤銷

GetLineCount   獲得多行編輯控件中的行數GetModify決定編輯控件的內容是否被修改SetModify爲編輯控件設置或清除修改標記

GetRect        爲編輯控件獲取格式化的矩形

GetHandle      獲得爲當前多行編輯控件分配的內存的句柄

SetHandle      設置爲多行編輯控件使用的本地內存的句柄

SetMargins     爲CEdit設置左邊和右邊的空白邊界

GetMargins     獲得爲CEdit設置左邊和右邊的空白邊界

SetLimitText   設置CEdit能夠容納的文本的最大量

GetLimitText   獲得CEdit能夠容納的文本的最大量

PosFromChar    獲得指定字符索引的左上角的座標

CharFromPos    獲得最靠近指定位置的字符的行和字符索引

GetLine        從編輯控件中獲得一行文本

GetPasswordChar  獲得當用戶輸入文本時在編輯控件中顯示的口令

GetFirstVisibleLeLine    決定在編輯控件中最頂部的可視的行

1.2  CEdit 操作

EmptyUndoBuffer      重新設置(清除)編輯控件的撤銷標記

FmtLines             設置在多行編輯控件中的軟回車打開或關閉

LimitText            用戶在輸入文本時的文本長度限制

LineFromChar         獲得包含指定字符索引的行的數目

LineIndex            獲得在多行編輯控件中的某行的字符索引

LineLength           獲得編輯控件中的行的長度

LineScroll           在多行編輯控件中滾動文本

ReplaceSel           用指定文本覆蓋編輯控件中當前被選中的文本

SetPasswordChar      設置或清除當用戶輸入文本時在編輯控件中顯示的口令

SetRect              設置多行編輯控件的帶格式的矩形,並更新該控件

SetRectNP            設置多行編輯控件的帶格式的矩形,而不必重新繪製

SetSel               在編輯控件中選定文本

SetTabStops          設置多行編輯控件的製表鍵停頓位

SetReadOnly          爲編輯控件設置只讀狀態

1.3  CEdit剪貼板操作

Undo    撤銷上一次的編輯控件操作

Clear    刪除(清除)編輯控件中當前選中的文本

Copy    將編輯控件中的當前選中文本以CF_TEXT格式拷貝到剪貼板中

Cut       刪除編輯控件中當前選中的文本,並將刪除的文本以CF_TEXT格式拷貝到剪貼板中

Paste   在當前光標位置插入剪貼板內的文本。只有在剪貼板數據爲CF_TEXT格式時才進行插入

2       成員函數

2.1  CEdit::CanUndo

BOOL CanUndo() const;

返回值如果上一次編輯操作可以用Undo成員函數撤銷,則返回非零值,否則爲0。說明調用該函數來決定上一次編輯操作是否可以撤銷。

要了解更多信息,請參閱Win 32文檔中的EM_CANUNDO 。請參閱  CEdit::Undo,CEdit::EmptyUndoBuffer

2.2  CEdit::CEdit

CEdit();說明構造一個CEdit對象。使用Create來創建Windows 編輯控件。

請參閱  CEdit::Create

2.3  CEdit::CharFromPos

int CharFromPos(CPoint pt) const;

返回值返回WORD低位的字符索引,以及WORD高位的行索引。參數pt在客戶區域中的CEdit對象的點的座標。說明調用該函數來獲取基於0索引的行和最接近CEdit控件中指定點的字符索引。

注意  該成員函數在Windows 95和Windows NT 4.0中有效。

要了解更多的信息,請參閱Win 32文檔中的EM_CHARFROMMOPS。請參閱  CEdit::PosFromChar

2.4  CEdit::Clear

void Clear();

說明調用該函數來刪除(清除)編輯控件中當前選中的文本。

由Clear進行的操作可以通過調用Undo成員函數撤銷。要刪除當前選定文本並將其拷貝到剪貼板上,調用Cut成員函數。要了解更多的信息,請參閱Win 32文檔中的WM_CLEAR。請參閱  CEdit::Undo,CEdit::Copy,CEdit::Cut,CEdit::Paste

2.5  CEdit::Copy

oid Copy();

說明調用該函數將編輯控件中的當前選中文本以CF_TEXT格式拷貝到剪貼板中。要了解更多的信息,請參閱Win 32文檔中的WM_COPY。請參閱  CEdit::Clear,CEdit::Cut,CEdit::Paste

2.6  CEdit::Create

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

返回值初始化成功,則返回非零值,否則爲0。參數dwStyle指定編輯控件的風格。可以組合使用控件的編輯風格。

rect          指定控件的尺寸和位置。可以是RECT結構或CRect對象 。

pParentWnd    指定編輯控件的父窗口(通常使用CDialog )。其值不能爲NULL。

nID           指定編輯控件的ID。

說明

構造CEdit對象分兩步。首先調用CEdit構造程序,再調用Create,這樣就創建了一個Windows 編輯控件,並將其與CEdit對象連接。當執行Create時,Windows 發送WM_NCCREATE ,WM_NCCALCSIZE ,WM_CREATE 和WM_GETMINMAXINFO 消息到編輯控件。

缺省地,這些消息由CWnd 基類中的OnNcCalcSize,OnCreate,OnNcCreate和OnGetMinMaxInfo成員函數處理。要擴展缺省的消息處理,先從CEdit派生一個類,爲新類添加消息映射並覆蓋上述消息處理成員函數。例如,覆蓋OnCreate爲新類執行所需要的初始化操作。

可以爲編輯控件應用如下的風格:

WS_CHILD     總是採用

WS_VISIBLE   經常採用

WS_DISABLED  很少採用

WS_GROUP     組合控件

WS_TABSTOP   按製表鍵次序包含編輯控件

請參閱  CEdit::CEdit

2.7  CEdit::Cut

void Cut();

說明調用該函數來刪除(剪切)在編輯控件中的當前選定文本,並將其用CF_TEXT格式拷貝到剪貼板中。由Cut執行的刪除可以由Undo成員函數來撤銷。刪除當前選定部分而不將已刪除文本置於剪貼板,調用Clear成員函數。要了解更多的信息,請參閱Win 32文檔中的WM_CUT。請參閱  CEdit::Undo ,CEdit::Clear,CEdit::Copy,CEdit::Paste

2.8  CEdit::EmptyUndoBuffer

Void EmptyUndoBuffer();

說明調用此成員函數重新設置(清除)一個編輯控件中的撤消標記,使編輯控件不可撤消最近一次操作。撤消標記在編輯控件的某個操作可以撤消時建立。當調用SetWindows 或SetHandle Cwnd成員函數時,撤消標記自動被清除。要了解更多的信息,請參閱Win32文檔中的EM_EMPTYUNDOBUFFER。請參閱  CEdit::CanUndo, CEdit::SetHandle, CEdit::Undo,CWnd::SetWindowText

2.9  CEdit::FmtLines

BOOL  FmtLines(BOOL bAddEOL);

返回值如果發生格式化,則返回非零值,否則爲0。

參數

bAddEOl

指定是否要插入軟斷行符,值爲True時插入軟斷行符,爲False時去掉軟斷行符。說明調用此成員函數用於設置在一個多行編輯控件中是否包含軟斷行符。一個軟斷行符包含在斷行行末插入兩個回車和一個換行,這是因爲一行可容納的文字有限。而一個硬斷行符包含一個回車和一個斷行。以硬斷行符結束的行不受FmtLines的影響。

僅在CEdit對象是一個多行編輯控件時Windows才響應此命令。FmtLines僅影響GetHandle返回的緩衝區和WM_GETTEXT返回的文本,而對編輯控件中的顯示無影響。

要了解更多信息,請參閱Win32文檔中的EM_FMTLINES。

請參閱  CEdit::GetHandle, CWnd::GetWindowText

2.10       CEdit::GetFirstVisibleLine

int GetFirstVisibleLine()const;

返回值可視的最頂端行的行號(行號由0開始),對單行編輯控件來說,返回值爲0。說明調用此成員函數決定編輯控件中可視的最頂端行的行號。

要了解更多信息,請參閱Win32文檔中的EM_GETFIRSTVISIBLELINE。

請參閱  CEdit::GetLine

2.11       CEdit::GetHandle

HLOCAL GetHandle() const;

返回值一個用於標識編輯控件內容的局部內存句柄。如果發生錯誤,例如發送信息到一個單行編輯控件,則返回值爲0。說明調用此成員函數來獲取一個多行編輯控件中當前分配的內存句柄。此句柄是一個局部內存句柄,可被任何局部Windows存儲函數作爲一個參數來獲得。

GetHandle僅僅被多行編輯控件處理。

在一個多行編輯控件的對話框中調用此成員函數時,對話框必須由DS_LOCAL-EDIT的樣式標誌集生成。如果不是,雖然也可以得到一個非零的返回值,但此返回值不可被使用。

注意

GetHandle不可在Windows 95下運行。如果在Windows 95下調用,會返回NULL。GetHandle可在Windows NT 3.51版及以上使用。要了解有關的更多信息,請參閱Win32文檔中的EM_GETHANDLE。

請參閱  CEdit::SetHandle

2.12       CEdit::GetLimitText

UINT GetLimitText() const;

返回值對當前CEdit對象的文本大小限制,以字節計算。說明調用此成員函數來獲取該CEdit對象的文本大小限制,文本限制是此編輯控件可以接收的文本的最大長度(以字節計算)。

注意

此成員函數僅在Windows 95和Windows NT 4.0以上版本中可用。要了解更多信息,請參閱Win32文檔中的EM_GETLIMITTEXT。

請參閱  CEdit::SetLimitText, CEdit::LimitText

2.13       CEdit::GetLine

int GetLine(int nIndex, LPCTSTR lpszBuffer) const;

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

返回值實際拷貝的字節數。如果由nIndex指定的行號大於此編輯控件的行數,則返回值爲0。

參數

nIndex    指定從多行編輯控件中檢索的行的行號,行號由0指定。對單行編輯控件,此參數被忽略。

lpszBuffer指向獲取此行備份的緩衝區。緩衝區的第一個字必須指定能被拷貝到緩衝區的最大字節數。   nMaxLength指定能被拷貝到緩衝區的最大字節數,GetLine在調用Windows之前將此值放置到lpszBuffer的第一個字中。說明調用此成員函數從編輯控件中獲取文本的一行並將其放置到lpszBuffer緩衝區。被拷貝的行不包括空終止符。要了解更多信息,請參閱Win32文檔中的EM_GETLINE。

3       文本控件的常用通知消息

消息名稱                  消息說明

EN_CHANGE         編輯控件的內容一旦發生改變,就發送這條消息。

EN_ERRSPACE    任何時候只要由於內存不足以完成一項編輯操作,就發送這條消息。

EN_HSCROLL 只要用戶單擊了從屬於一個編輯控件的水平滾動條的任何地方,就會發送這條消息。注意這條消息是在控件更新顯示之前發送出去的。

EN_KILLFOCUS    一旦控件丟失了輸入焦點,則發出這條消息。

EN_MAXTEXT        只要用戶輸人的文字試圖超出由EM_LIMITTEXT消息規定購界限,或試圖超出由VB Maxlength屬性規定的界限,就會發送這條消息。此外,倘若不允許自動進行水平滾動,同時插入點要超出控件的寬度;或者不允許自動自動滾動,同時插入點要超出接件的高度,那麼也會觸發這條消息。

EN_SETFOCUS     一旦控件接收到了輸入焦點,就發出這條消息。

EN_UPDATE / EN_VSCROLL  只要用戶單擊了從屬於一個編輯控件的垂直滾動條的任何地方,就會發送這條消息。注意這條消息是在控件更新顯示之前發送出去的。

4       文本控件的常用消息

消息名稱                         消息說明

EM_CANUNDO             決定前一次編輯操作是否能夠撤消

EM_EMPTYUNDOBUFFER      清除控件的撤消緩衝區,使其不可能撤消前一次編輯操作

EM_UNDO                     撤消前一次編輯操作

EM_FMTLINES              決定是否在取回的文本宇串中包含軟回車字符

EM_GETLIMITTEXT      獲取一個編輯控件中文本的最大長度

EM_GETMARGINS       獲取編輯控件的左、右邊距(不得用於NT3.51)

EM_GETRECT              獲取一個編輯控件的格式化矩形

EM_LIMITTEXT              限制編輯耀件甲購文本長度

EM_SETLIMITTEXT      限制編輯控件中的文本長度(不得用於NT3.51)

EM_SETMARGINS       設置編輯控件的左、右邊距(不得用於NT3.51)

EM_SETRECT                     爲一個編輯控件設置格式化矩形

EM_SETRECTNP         與EM_SETRECT類似,只是控件此時不會重畫

EM_SETTABSTOPS    設置編輯控件中的製表站間距

EM_CHARFROMPOS  判斷編輯控件指定位置處的字符(不適用於NT3.51)

EM_GETFIRSTVISIBLEIN  判斷編輯控件中顯示的第一行

EM_GETLINE                從編輯控件取回…行的內容

EM_GETLINECOUNT   判斷一個編輯控件的總行數

EM_GETMODIFY          判斷編輯控件的內容是否已發生變化

EM_GETPASSWORDCHAR    取得編輯控件的密碼字符

EM_GETSEL                        判斷編輯控件中一段選定內容的起點與終點

EM_LINEFROMCHAR         判斷是哪一行顯示了某個特殊字符

EM_LINEINDEX                   判斷指定行第一個字符的編號

EM_LINELENGTH                判斷一行長度

EM_LINESCROLL               滾動編輯控件

EM_POSFROMCHAR         判斷指定字符在編輯控件的位置(用於NT3.51)

EM_REPLACESEL             用指定文本替換編輯控件中的當前選定內容

EM_SETMODIFY                 用於設置或清除一個編輯控件的修改標誌

EM_SETPASSWORDCHAR    爲指定的控件設置密碼字符

EM_READONLY                  決定是否將編輯控件設爲只讀

EM_SETSEL                        設置編輯控件中一段選定內容的起點一終點


轉載:http://hohosoft.com/?p=420

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章