1. 程式人生 > >CEdit編輯控制元件

CEdit編輯控制元件

CEdit從CWnd繼承了重要的功能,要在CEdit物件中設定或獲取文字,使用CWnd成員函式SetWindowText和GetWindowText,可以設定和得到編輯控制元件的全部內容,即使它是一個多行控制元件。如果編輯控制元件是多行的,使用CEdit成員函式GetLine,SetSel,GetSel和ReplaceSel來獲取和寫入控制元件的部分文字。

為了讓編輯框控制元件接受換行符,必須設定該控制元件支援多行輸入這一屬性。

要注意的地方:若在對話方塊的OnInitDialog()中設定焦點到編輯框控制元件上,OnInitDialog需返回FALSE。

eg:

BOOL CtestDlg::OnInitDialog()
{
        ......

	// TODO: 在此新增額外的初始化程式碼
	static CEdit MyEdit;//定義編輯框控制元件
	MyEdit.Create(ES_LEFT|WS_VISIBLE, CRect(0,100,200,120),this, 123);
	CFont fontEdit;
	fontEdit.CREATE_FONT(20, _T("宋體"));
	MyEdit.SetFont(&fontEdit);//設定編輯框中字型
	MyEdit.SetFocus();//設定焦點到編輯框
	MyEdit.SetPasswordChar(_T('*'));//作為密碼輸入控制元件使用

	<strong>return FALSE;  // 除非將焦點設定到控制元件,否則返回 TRUE</strong>
}

CEdit::Create()用來建立編輯控制元件,並將其與Cedit物件關聯。

virtual BOOL Create(
   DWORD dwStyle,    //控制元件風格
   const RECT& rect, //控制元件區域
   CWnd* pParentWnd, //父視窗
   UINT nID          //ID
);

其中控制元件風格為以下值的“或”組合:

ES_AUTOHSCROLL:當輸入文字超出顯示橫向範圍時自動滾動。

ES_AUTOVSCROLL:當輸入文字超出顯示豎向範圍時自動滾動。

ES_CENTER:文字居中對齊

ES_LEFT:文字左對齊

ES_RIGHT

:文字右對齊

ES_LOWERCASE:字元小寫顯示

ES_UPPERCASE:字元大寫顯示

ES_MULTILINE:允許多行輸入(預設是單行的),如果指定了ES_AUTOVSCROLL風格,編輯控制元件將顯示儘可能多的文字,並且當用戶按下ENTER鍵時會自動地垂直滾動文字。如果沒有指定ES_AUTOVSCROLL風格,則編輯控制元件將顯示儘可能多的行,如果在按下ENTER鍵卻沒有更多的行要顯示的話,就發出蜂鳴聲。如果指定了ES_AUTOHSCROLL風格,當游標到達控制元件的右邊時,多行編輯控制元件會自動地水平滾動文字。如果要開始一個新行,使用者必須按下ENTER鍵。如果沒有指定ES_AUTOHSCROLL風格,控制元件會在有必要時自動將單詞摺合到下一行的開始。如果按下ENTER鍵,則另起一行。折回單詞的位置是由視窗的大小決定的。如果視窗的大小發生改變,折回單詞的位置也會反生改變,將會重新顯示文字。多行編輯控制元件可以有滾動條。具有滾動條的編輯控制元件會處理它自己的滾動條訊息。沒有滾動條的編輯控制元件按照前面描述的方式進行滾動,並且處理父視窗發出的任何滾動訊息。

ES_NOHIDESEL通常,當編輯控制元件獲得輸入焦點時,它會顯示選擇區域, 當失去輸入焦點時,它會隱藏選擇區域。如果指定了ES_NOHIDESEL風格則去掉了這個預設的動作。

ES_NUMBER只允許輸入數字

ES_OEMCONVERT輸入到編輯控制元件的文字將被從ANSI字符集轉換到OEM字符集,然後轉換回ANSI字符集。這使得在應用程式呼叫Windows的AnsiToOem函式以把編輯控制元件中的ANSI字串轉換為OEM字元時,能夠進行正確的字元轉換。這個風格對包含檔名的編輯控制元件最有用。

ES_PASSWORD在編輯控制元件中輸入字元時,將所有的字元顯示為星號(*)。應用程式可以通過SetPasswordChar成員函式來改變顯示的字元。

ES_READONLY:編輯框為只讀。

ES_WANTRETURN當用戶在多行編輯控制元件中輸入文字時,如果按下了ENTER鍵,則插入回車換行符。這個風格對單行編輯控制元件不起作用。

CEdit成員:

建構函式

CEdit 構造一個CEdit控制元件物件 Create 建立一個Windows編輯控制元件,並將其與CEdit物件連線。

屬性

CanUndo 決定一個編輯控制元件操作是否能夠被撤銷 GetLineCount 獲得多行編輯控制元件中的行數 GetModify 決定編輯控制元件的內容是否被修改 SetModify 為編輯控制元件設定或清除修改標記 GetRect 為編輯控制元件獲取格式化的矩形 GetHandle 獲得為當前多行編輯控制元件分配的記憶體的控制代碼 SetHandle 設定為多行編輯控制元件使用的本地記憶體的控制代碼 SetMargins 為CEdit設定左邊和右邊的空白邊界 GetMargins 獲得為CEdit設定左邊和右邊的空白邊界 SetLimitText 設定CEdit能夠容納的文字的最大量 GetLimitText 獲得CEdit能夠容納的文字的最大量 PosFromChar 獲得指定字元索引的左上角的座標 CharFromPos 獲得最靠近指定位置的字元的行和字元索引 GetLine 從編輯控制元件中獲得一行文字
GetSel 從編輯控制元件中獲得所選中文字的位置

GetPasswordChar 獲得當用戶輸入文字時在編輯控制元件中顯示的口令
GetFirstVisibleLeLine 決定在編輯控制元件中最頂部的可視的行

操作

EmptyUndoBuffer 重新設定(清除)編輯控制元件的撤銷標記 FmtLines 設定在多行編輯控制元件中的軟回車開啟或關閉 LimitText 使用者在輸入文字時的文字長度限制 LineFromChar 獲得包含指定字元索引的行的數目 LineIndex 獲得在多行編輯控制元件中的某行的字元索引 LineLength 獲得編輯控制元件中的行的長度 LineScroll 在多行編輯控制元件中滾動文字 ReplaceSel 用指定文字替換編輯控制元件中當前被選中的文字 SetPasswordChar 設定或清除當用戶輸入文字時在編輯控制元件中顯示的口令 SetRect 設定多行編輯控制元件的帶格式的矩形,並更新該控制元件 SetRectNP 設定多行編輯控制元件的帶格式的矩形,而不必重新繪製 SetSel 在編輯控制元件中選中文字,SetSel(-1)將游標移動到文字末尾,SetSel(0)將游標移動到文字開頭
SetTabStops設定多行編輯控制元件的製表鍵停頓位 SetReadOnly 為編輯控制元件設定只讀狀態

剪貼簿操作

Undo 撤銷上一次的編輯控制元件操作 Clear 刪除(清除)編輯控制元件中當前選中的文字 Copy 將編輯控制元件中的當前選中文字以CF_TEXT格式拷貝到剪貼簿中 Cut 刪除編輯控制元件中當前選中的文字,並將刪除的文字以CF_TEXT格式拷貝到剪貼簿中 Paste 在當前游標位置插入剪貼簿內的文字。只有在剪貼簿資料為CF_TEXT格式時才進行插入

下面是一組可能的訊息對映入口,以及在何種情況下向父類傳送的描述: 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 使用者單擊了編輯控制元件中的垂直滾動條,父視窗在螢幕更新之前被通知。
可以利用CWnd::GetWindowText()/SetWindowText()來獲得/設定編輯控制元件中的文字。

轉載出處:http://baike.baidu.com/link?url=3CxMnrlXUfzd9pVMQpk0_YMy50-DZRlfg8k74-gqMmmgOshHngR-p98XBmgNIJg5QzMjlXcQb711WuvV_hf70a

                    http://blog.sina.com.cn/s/blog_4520b87a0100c6pb.html