• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            山寨:不是最好的,是最適合我們的!歡迎體驗山寨 中文版MSDN

            Blog @ Blog

            當華美的葉片落盡,生命的脈絡(luò)才歷歷可見。 -- 聶魯達

            常用鏈接

            統(tǒng)計

            積分與排名

            BBS

            Blog

            Web

            最新評論

            編輯框控件的一些用法

            編輯框(Edit Box)控件實際上是一個簡易的正文編輯器,用戶可以在編輯框中輸入并編輯正文。編輯框既可以是單行的,也可以是多行的,多行編輯框是從零開始編行號的.在一個多行編輯框中,除了最后一行外,每一行的結(jié)尾處都有一對回車換行符(用"\r\n"表示).這對回車換行符是正文換行的標志,在屏幕上是不可見的.

            編輯框控件會向父窗口發(fā)出如表6.5所示的控件通知消息. 

            表6.5

            消息

            含義

            EN_CHANGE

            編輯框的內(nèi)容被用戶改變了。與EN_UPDATE不同,該消息是在編輯框顯示的正文被刷新后才發(fā)出的。

            EN_ERRSPACE

            編輯框控件無法申請足夠的動態(tài)內(nèi)存來滿足需要。

            EN_HSCROLL

            用戶在水平滾動條上單擊鼠標。

            EN_KILLFOCUS

            編輯框失去輸入焦點。

            EN_MAXTEXT

            輸入的字符超過了規(guī)定的最大字符數(shù)。在沒有ES_AUTOHSCROLL或ES_AUTOVSCROLL的編輯框中,當正文超出了編輯框的邊框時也會發(fā)出該消息。

            EN_SETFOCUS

            編輯框獲得輸入焦點。

            EN_UPDATE

            在編輯框準備顯示改變了的正文時發(fā)送該消息。

            EN_VSCROLL

            用戶在垂直滾動條上單擊鼠標。

            MFC的CEdit類封裝了編輯框控件。CEdit類的成員函數(shù)Create負責(zé)創(chuàng)建按鈕控件,該函數(shù)的聲明為

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

            參數(shù)dwStyle指定了編輯框控件風(fēng)格,如表6.6所示,dwStyle可以是這些風(fēng)格的組合。rect指定了編輯框的位置和尺寸。pParentWnd指定了父窗口,不能為NULL。編輯框的ID由nID指定。如果創(chuàng)建成功,該函數(shù)返回TRUE,否則返回FALSE.

            表6.6 編輯框控件的風(fēng)格

            控件風(fēng)格

            含義

            ES_AUTOHSCROLL

            當用戶在行尾鍵入一個字符時,正文將自動向右滾動10個字符,當用戶按回車鍵時,正文總是滾向左邊。

            ES_AUTOVSCROLL

            當用戶在最后一個可見行按回車鍵時,正文向上滾動一頁。

            ES_CENTER

            在多行編輯框中使正文居中。

            ES_LEFT

            左對齊正文。

            ES_LOWERCASE

            把用戶輸入的字母統(tǒng)統(tǒng)轉(zhuǎn)換成小寫字母。

            ES_MULTILINE

            指定一個多行編輯器。若多行編輯器不指定ES_AUTOHSCROLL風(fēng)格,則會自動換行,若不指定ES_AUTOVSCROLL,則多行編輯器會在窗口中正文裝滿時發(fā)出警告聲響。

            ES_NOHIDESEL

            缺省時,當編輯框失去輸入焦點后會隱藏所選的正文,當獲得輸入焦點時又顯示出來。設(shè)置該風(fēng)格可禁止這種缺省行為。

            ES_OEMCONVERT

            使編輯框中的正文可以在ANSI字符集和OEM字符集之間相互轉(zhuǎn)換。這在編輯框中包含文件名時是很有用的。

            ES_PASSWORD

            使所有鍵入的字符都用“*”來顯示。

            ES_RIGHT

            右對齊正文。

            ES_UPPERCASE

            把用戶輸入的字母統(tǒng)統(tǒng)轉(zhuǎn)換成大寫字母。

            ES_READONLY

            將編輯框設(shè)置成只讀的。

            ES_WANTRETURN

            使多行編輯器接收回車鍵輸入并換行。如果不指定該風(fēng)格,按回車鍵會選擇缺省的命令按鈕,這往往會導(dǎo)致對話框的關(guān)閉。

            除了上表中的風(fēng)格外,一般還要為控件指定WS_CHILD、WS_VISIBLE、WS_TABSTOP和WS_BORDER窗口風(fēng)格,WS_BORDER使控件帶邊框。創(chuàng)建一個普通的單行編輯框應(yīng)指定風(fēng)格為WS_CHILD|WS_VISIBLE|WS_TABSTOP |WS_BORDER|ES_LEFT|ES_AUTOHSCROLL,這將創(chuàng)建一個帶邊框、左對齊正文、可水平滾動的單行編輯器。要創(chuàng)建一個普通多行編輯框,還要附加ES_MULTILINE|ES_WANTRETURN|ES_AUTOVSCROLL |WS_HSCROLL| WS_VSCROLL風(fēng)格,這將創(chuàng)建一個可水平和垂直滾動的,帶有水平和垂直滾動條的多行編輯器。

            對于用對話框模板編輯器創(chuàng)建的編輯框控件,可以在控件的屬性對話框中指定表6.6中列出的控件風(fēng)格。例如,在屬性對話框中選擇Multi-line項,相當與指定了ES_MULTILINE風(fēng)格。

            編輯框支持剪貼板操作。CEdit類提供了一些與剪貼板有關(guān)的成員函數(shù),如表6.7所示。

            表6.7 與剪切板有關(guān)的CEdit成員函數(shù)

            函數(shù)聲明

            用途

            void Clear( )

            清除編輯框中被選擇的正文。

            void Copy( )

            把在編輯框中選擇的正文拷貝到剪貼板中。

            void Cut( )

            清除編輯框中被選擇的正文并把這些正文拷貝到剪貼板中。

            void Paste( )

            將剪貼板中的正文插入到編輯框的當前插入符處。

            BOOL Undo( )

            撤消上一次鍵入。對于單行編輯框,該函數(shù)總返回TRUE,對于多行編輯框,返回TRUE表明操作成功,否則返回FALSE。

            可以用下列CEdit或CWnd類的成員函數(shù)來查詢編輯框。在學(xué)習(xí)下面的函數(shù)時,讀者會經(jīng)常遇到術(shù)語字符索引.字符的字符索引是指從編輯框的開頭字符開始的字符編號,它是從零開始編號的.也就是說,字符索引實際上是指當把整個編輯正文看作一個字符串數(shù)組時,該字符所在的數(shù)組元素的下標.

            int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const;
            void GetWindowText( CString& rString ) const;
            這兩個函數(shù)均是CWnd類的成員函數(shù),可用來獲得窗口的標題或控件中的正文。第一個版本的函數(shù)用lpszStringBuf參數(shù)指向的字符串數(shù)組作為拷貝正文的緩沖區(qū),參數(shù)nMaxCount可以拷貝到緩沖區(qū)中的最大字符數(shù),該函數(shù)返回以字節(jié)為單位的實際拷貝字符數(shù)(不包括結(jié)尾的空字節(jié))。第二個版本的函數(shù)用一個CString對象作為緩沖區(qū)。

            int GetWindowTextLength( ) const;
            CWnd的成員函數(shù),可用來獲得窗口的標題或控件中的正文的長度。

            DWORD GetSel( ) const;
            void GetSel( int& nStartChar, int& nEndChar ) const;
            兩個函數(shù)都是CEdit的成員函數(shù),用來獲得所選正文的位置。GetSel的第一個版本返回一個DWORD值,其中低位字說明了被選擇的正文開始處的字符索引,高位字說明了選擇的正文結(jié)束處的后面一個字符的字符索引,如果沒有正文被選擇,那么返回的低位和高位字節(jié)都是當前插入符所在字符的字符索引。GetSel的第二個版本的兩個參數(shù)是兩個引用,其含義與第一個版本函數(shù)返回值的低位和高位字相同。

            int LineFromChar( int nIndex = –1 ) const;
            CEdit的成員函數(shù),僅用于多行編輯框,用來返回指定字符索引所在行的行索引(從零開始編號)。參數(shù)nIndex指定了一個字符索引,如果nIndex是-1,那么函數(shù)將返回選擇正文的第一個字符所在行的行號,若沒有正文被選擇,則該函數(shù)會返回當前的插入符所在行的行號。

            int LineIndex( int nLine = –1 ) const;
            CEdit的成員函數(shù),僅用于多行編輯框,用來獲得指定行的開頭字符的字符索引,如果指定行超過了編輯框中的最大行數(shù),該函數(shù)將返回-1。參數(shù)nLine是指定了從零開始的行索引,如果它的值為-1,則函數(shù)返回當前的插入符所在行的字符索引。

            int GetLineCount( ) const;
            CEdit的成員函數(shù),僅用于多行編輯框,用來獲得正文的行數(shù)。如果編輯框是空的,那么該函數(shù)的返回值是1。

            int LineLength( int nLine = –1 ) const;
            CEdit的成員函數(shù),用于獲取指定字符索引所在行的字節(jié)長度(行尾的回車和換行符不計算在內(nèi))。參數(shù)nLine說明了字符索引.如果nLine的值為-1,則函數(shù)返回當前行的長度(假如沒有正文被選擇),或選擇正文占據(jù)的行的字符總數(shù)減去選擇正文的字符數(shù)(假如有正文被選擇)。若用于單行編輯框,則函數(shù)返回整個正文的長度。

            int GetLine( int nIndex, LPTSTR lpszBuffer ) const;
            int GetLine( int nIndex, LPTSTR lpszBuffer, int nMaxLength ) const;
            CEdit的成員函數(shù),僅用于多行編輯框,用來獲得指定行的正文(不包括行尾的回車和換行符)。參數(shù)nIndex是行號,lpszBuffer指向存放正文的緩沖區(qū),nMaxLength規(guī)定了拷貝的最大字節(jié)數(shù),若。函數(shù)返回實際拷貝的字節(jié)數(shù),若指定的行號大于編輯框的實際行數(shù),則函數(shù)返回0。需要注意的是,GetLine函數(shù)不會在緩沖區(qū)中字符串的末尾加字符串結(jié)束符(NULL).

             

            下列CWnd或CEdit類的成員函數(shù)可用來修改編輯框控件。

            void SetWindowText( LPCTSTR lpszString );
            CWnd的成員函數(shù),可用來設(shè)置窗口的標題或控件中的正文。參數(shù)lpszString可以是一個CString對象,或是一個指向字符串的指針。

            void SetSel( DWORD dwSelection, BOOL bNoScroll = FALSE );
            void SetSel( int nStartChar, int nEndChar, BOOL bNoScroll = FALSE );
            CEdit的成員函數(shù),用來選擇編輯框中的正文。參數(shù)dwSelection的低位字說明了選擇開始處的字符索引,高位字說明了選擇結(jié)束處的字符索引。如果低位字為0且高位字節(jié)為-1,那么就選擇所有的正文,如果低位字節(jié)為-1,則取消所有的選擇.參數(shù)bNoScroll的值如果是FALSE,則滾動插入符并使之可見,否則就不滾動.參數(shù)nStartChar和nEndChar的含義與參數(shù)dwSelection的低位字和高位字相同.

            void ReplaceSel( LPCTSTR lpszNewText, BOOL bCanUndo = FALSE );
            CEdit的成員函數(shù),用來將所選正文替換成指定的正文.參數(shù)lpszNewText指向用來替換的字符串.參數(shù)bCanUndo的值為TRUE說明替換是否可以被撤消的.

             

            在調(diào)用上述函數(shù)時,如果涉及的是一個多行編輯框,那么除了LineLength和GetLine函數(shù)外,都要把回車和換行符考慮在內(nèi).例如,假設(shè)在編輯框中有如下幾行正文:

            abcd

            efg

            ij

            那么字母"e"的字符索引是6而不是4,因為"abcd"后面還有一對回車換行符.調(diào)用LineLength(7)會返回第二行的長度3.調(diào)用LineIndex(2)會得到11.調(diào)用LineFromChar(8)會返回1.如果沒有選擇任何正文,并且插入符在字母"e"上,那么調(diào)用GetSel返回值的低位和高位字都是6.

            通過分析上述函數(shù),我們可以總結(jié)出一些查詢和設(shè)置編輯框的方法.

            調(diào)用CWnd的成員函數(shù)GetWindowText和SetWindowText可以查詢和設(shè)置編輯框的整個正文,在上一章的Register程序中,我們就使用過這兩個函數(shù).

            如果想對多行編輯框逐行查詢,那么應(yīng)該先調(diào)用GetLineCount獲得總行數(shù),然后再調(diào)用GetLine來獲取每一行的正文.下面一段代碼演示了如何對多行編輯框進行逐行查詢.

            char buf[40];

            int total=MyEdit.GetLineCount();

            int i,length;

            for(i=0;i

            {

            length=MyEdit.GetLine(i,buf,39);

            buf[length]=0; //加字符串結(jié)束符

            . . . . . .}

            可以利用LineIndex和LineFromChar來在字符索引和字符的行列坐標之間相互轉(zhuǎn)換.下列代碼演示了在已知字符索引的情況下,如何獲得對應(yīng)的行列坐標:
            int row,column;
            row=MyEdit.LineFromChar(charIndex);
            column=charIndex-MyEdit.LineIndex(row);
            下列代碼演示了在已知字符的行列坐標的情況下,如何獲得對應(yīng)的字符索引:
            int charIndex;
            charIndex=MyEdit.LineIndex(row)+column;
            不難看出字符索引與對應(yīng)的行列坐標的關(guān)系是:字符索引=LineIndex(行坐標)+列坐標.

            對于選擇正文的查詢和設(shè)置,應(yīng)該利用函數(shù)GetSel、SetSel和ReplaceSel.

            可以利用GetSel和SetSel來查詢和設(shè)置插入符的位置.SetSel可以使編輯框滾動到插入符的新位置.
            要獲取插入符的行列坐標,可用下面的代碼實現(xiàn):
            MyEdit.SetSel(-1,0); //取消正文的選擇
            int start,end,row,column;
            MyEdit.GetSel(start,end); //start或end的值就是插入符的字符索引
            row=MyEdit.LineFromChar(start); //獲取插入符的行坐標
            column=start-MyEdit.LineIndex(row); //獲取插入符的列坐標
            下面的代碼演示了如何把插入符移到指定的行和列:
            MyEdit.SetSel(-1,0); //取消正文的選擇
            int charIndex=MyEdit.LineIndex(row)+column;
            MyEdit.SetSel(charIndex,charIndex);

            可以利用ReplaceSel函數(shù)在 插入符處插入正文,典型的代碼如下所示:
            MyEdit.SetSel(-1,0); //取消正文的選擇
            MyEdit.ReplaceSel(“......”);

            可以利用ReplaceSel清除編輯框中的正文,典型的代碼如下所示:
            MyEdit.SetSel(0,-1); //選擇全部正文
            MyEdit.ReplaceSel(“”);

            posted on 2007-12-21 17:00 isabc 閱讀(5003) 評論(1)  編輯 收藏 引用 所屬分類: VC Demo

            評論

            # re: 編輯框控件的一些用法 2008-10-01 11:46 GK

            謝謝  回復(fù)  更多評論   

            廣告信息(免費廣告聯(lián)系)

            中文版MSDN:
            歡迎體驗

            亚洲国产精品久久久天堂 | 国产欧美久久一区二区| 久久AV无码精品人妻糸列| 亚洲精品蜜桃久久久久久| 久久九九亚洲精品| 国产成人综合久久精品红| 婷婷久久香蕉五月综合加勒比| AV无码久久久久不卡网站下载| 久久午夜福利电影| 久久人人爽人人爽人人片av高请| 欧美精品一本久久男人的天堂| 久久精品无码一区二区app| 亚洲中文久久精品无码| 九九久久精品国产| 综合久久国产九一剧情麻豆| 国产精品欧美久久久久无广告 | 精品久久久久久中文字幕| 人妻少妇精品久久| 亚洲欧美日韩精品久久| 国产亚洲精品久久久久秋霞| 国产精品久久久久久久午夜片| 久久久久亚洲AV无码专区体验| 久久99亚洲综合精品首页| 韩国无遮挡三级久久| 久久人人爽人人爽人人片AV不| 亚洲精品99久久久久中文字幕 | 一极黄色视频久久网站| 国产精品亚洲综合专区片高清久久久| 亚洲国产精品18久久久久久| 性做久久久久久久久| 国产日韩久久久精品影院首页| 久久99国产精品久久99| 久久综合九色综合网站| 亚洲愉拍99热成人精品热久久| 一本久道久久综合狠狠躁AV| 污污内射久久一区二区欧美日韩| 久久九九久精品国产| 久久久久久久综合综合狠狠| 久久不射电影网| 色综合久久88色综合天天| 久久综合综合久久狠狠狠97色88|