C++ MFC / VS2013 之十九(常用控制項:編輯框Edit Control)

來源:互聯網
上載者:User
編輯框Edit Control      本節要講的編輯框(Edit Control)同樣是一種很常用的控制項,我們可以在編輯框中輸入並編輯文本。在前面加法計算機的例子中已經示範了編輯框的基本應用。下面具體講解編輯框的使用。
一. 編輯框的通知訊息     編輯框發生某些事件時會向父視窗發送通知訊息。在對話方塊模板中的編輯框上點右鍵,選擇“Add Event Handler”,為編輯框添加訊息處理函數時,可以在“Message type”列表中看到這些訊息。下面簡單介紹編輯框的部分通知訊息。
       EN_CHANGE:編輯框的內容被使用者改變了,與EN_UPDATE 不同,該訊息是在編輯框顯示的本文被重新整理後才發出的
       EN_ERRSPACE: 編輯框控制項無法申請足夠的動態記憶體來滿足需要
       EN_HSCROLL: 使用者在水平捲軸上單擊滑鼠
       EN_KILLFOCUS: 編輯框失去輸入焦點
       EN_MAXTEXT:輸入的字元超過了規定的最大字元數。在沒有ES_AUTOHSCROLL 或
       ES_AUTOVSCROLL: 的編輯框中,當本文超出了編輯框的邊框時也會發出該訊息
       EN_SETFOCUS: 編輯框獲得輸入焦點
       EN_UPDATE: 在編輯框準備顯示改變了的本文時發送該訊息
       EN_VSCROLL: 使用者在垂直捲軸上單擊滑鼠 二. 編輯框的建立       MFC為編輯框提供了CEdit類。編輯框的所有操作都封裝到了CEdit類中。
      與靜態文字框的建立類似,除了可以在對話方塊模板上拖進一個編輯框,然後關聯一個變數或通過API函數使用,也可以在程式中動態建立編輯框,即調用CEdit類的成員函數Create。      Create成員函數的原型如下:
virtual BOOL Create(   DWORD dwStyle,   const RECT& rect,   CWnd* pParentWnd,   UINT nID );
    參數說明:     dwStyle:指定編輯框的風格。可以是MSDN中“edit styles”包含風格的任意組合。    下面是“edit styles”的所有風格說明。
        ES_AUTOHSCROLL:當使用者在行尾鍵入一個字元時,本文將自動向右滾動10 個字元,當使用者按斷行符號鍵時,本文總是滾向左邊
        ES_AUTOVSCROLL: 當使用者在最後一個可見行按斷行符號鍵時,本文向上滾動一頁
        ES_CENTER: 在多行編輯框中使本文置中
        ES_LEFT :靠左對齊本文
        ES_LOWERCASE: 把使用者輸入的字母統統轉換成小寫字母
      ES_MULTILINE:指定一個多行編輯器。若多行編輯器不指定ES_AUTOHSCROLL 風格,則會自動換行,若不指定       ES_AUTOVSCROLL,則多行編輯器會在視窗中本文裝滿時
發出警告聲響
        ES_NOHIDESEL:預設時,當編輯框失去輸入焦點後會隱藏所選的本文,當獲得輸入焦點時又顯示出來。設定該風格可禁止這種預設行為
        ES_NUMBER :編輯框中只允許輸入數字
        ES_OEMCONVERT:使編輯框中的本文可以在ANSI 字元集和OEM 字元集之間相互轉換。這在編輯框中包含檔案名稱時是很有用的
        ES_PASSWORD: 使所有鍵入的字元都用“*”來顯示
        ES_READONLY: 將編輯框設定成唯讀
        ES_RIGHT :靠右對齊本文
        ES_UPPERCASE: 把使用者輸入的字母統統轉換成大寫字母
        ES_WANTRETURN:使多行編輯器接收斷行符號鍵輸入並換行。如果不指定該風格,按斷行符號鍵會選擇預設的命令按鈕,這往往會導致對話方塊的關閉       除了上面的風格外,編輯款一般還會設定WS_CHILD、WS_VISIBLE、WS_BORDER等視窗風格。另外,編輯框可以是多行的,也就是在編輯框中顯示多行文字,這就需要設定ES_MULTILINE風格,如果想要多行編輯框支援斷行符號鍵,則還要設定ES_WANTRETURN。       對於在對話方塊模板中建立的編輯框,它的屬性中包含了上述的風格,例如,Multiline屬性對應的就是ES_MULTILINE風格,Want Return屬性對應ES_WANTRETURN風格。       其他三個參數與靜態文字框的Create函數的參數類似,就不介紹了。 二.CEdit類的主要成員函數          使用編輯框最重要的莫過於,擷取和設定編輯框中的本文,它們對應的成員函數分別是GetWindowText和SetWindowText,這兩個函數都是繼承自CWnd類的成員函數,另外,還可以使用CWnd類的GetWindowTextLength函數擷取編輯框中本文的長度。      下面簡單介紹CEdit類的其他幾個主要的成員函數:     int LineFromChar(int nIndex = –1) const;
     返回多行編輯框中指定索引的字元所在行的行號(從零開始),只適用於多行編輯框。nIndex等於-1則返回所選擇本文的第一個字元所在行的索引。如果沒有選擇本文,則返回當前行的行號。     int LineIndex(int nLine = –1) const;      返回由nLine指定行的起始字元在編輯框的整個字串中的索引,只適用於多行編輯框。如果指定行超過編輯框的最大行數,則返回-1,而如果nLine為-1,則返回當前插入符所在行的起始字元的索引。      void GetSel(int& nStartChar,int& nEndChar) const;      擷取選擇本文的索引範圍。nStartChar返回被選擇本文的起始索引,nEndChar返回被選擇本文的終止索引(不包括在選擇範圍內)。如果沒有選擇本文,則兩者均為當前插入符的索引。    void SetSel(int nStartChar,int nEndChar,BOOL bNoScroll=FALSE);     選擇編輯框中的本文。nStartChar為選擇開始處的索引,nEndChar為選擇結束處的索引。如果nStartChar為0並且nEndChar為-1,則選擇所有本文,而如果nStartChar為-1則取消所有選擇。bNoScroll為FALSE時滾動插入符並使之可見,為TRUE時不滾動。     void ReplaceSel(LPCTSTR lpszNewText,BOOL bCanUndo = FALSE);     用lpszNewText指向的字串來替換選擇的本文。如果bCanUndo為TRUE則替換可以被撤銷。      int GetLineCount() const;     擷取本文的行數,只適用於多行編輯框。如果編輯框沒有本文則返回1。     int LineLength( int nLine = –1 ) const;     擷取指定字元索引所在行的位元組長度(行尾的斷行符號和分行符號不計算在內),參數nLine 說明了為字元索引。如果nLine 的值為-1,則函數返回當前行的長度(假如沒有本文被選擇),或選擇本文佔據的行的字元總數減去選擇本文的字元數(假如有本文被選擇)。若用於單行編輯框,則函數返回整個本文的長度。     int GetLine( int nIndex, LPTSTR lpszBuffer ) const;
    int GetLine( int nIndex, LPTSTR lpszBuffer, int nMaxLength ) const;      用來獲得指定行的本文(不包括行尾的斷行符號和分行符號),只適用於多行編輯框。參數nIndex 是行號,lpszBuffer 指向存放本文的緩衝區,nMaxLength 規定了拷貝的最大位元組數。若指定的行號小於編輯框的實際行數,函數返回實際拷貝的位元組數,若指定的行號大於編輯框的實際行數,則函數返回0。需要注意的是,GetLine 函數不會在緩衝區中字串的末尾添加字串結束符(NULL)。         UINT GetLimitText( ) const;      擷取編輯框能夠接受的本文的最大位元組數。     void LimitText(int nChars = 0);      設定使用者在編輯框中可以輸入的本文的最大長度(位元組數)。如果nChars為0,則最大長度為UINT_MAX個位元組。 三.CEdit類應用執行個體     下面為大家寫一個簡單的例子,來說明CEdit類的幾個成員函數的使用方法。此例的功能是,首先在編輯框中顯示一行本文,然後替換其中部分字元為另一個含有斷行符號符的字串,最終顯示為兩行本文。下面是簡單的步驟介紹:
    1.建立基於對話方塊的MFC程式,名稱為“Example21”。     2.在自動產生的對話方塊模板IDD_EXAMPLE21_DIALOG中,刪除靜態文字框“TODO: Place dialog controls here.”,添加一個編輯框,ID設為IDC_MULTI_LINE_EDIT,屬性Multiline設定為true。    
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.