青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

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

Blog @ Blog

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

常用鏈接

統計

積分與排名

BBS

Blog

Web

最新評論

編輯框控件的一些用法

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

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

表6.5

消息

含義

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類的成員函數Create負責創建按鈕控件,該函數的聲明為

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

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

表6.6 編輯框控件的風格

控件風格

含義

ES_AUTOHSCROLL

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

ES_AUTOVSCROLL

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

ES_CENTER

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

ES_LEFT

左對齊正文。

ES_LOWERCASE

把用戶輸入的字母統統轉換成小寫字母。

ES_MULTILINE

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

ES_NOHIDESEL

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

ES_OEMCONVERT

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

ES_PASSWORD

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

ES_RIGHT

右對齊正文。

ES_UPPERCASE

把用戶輸入的字母統統轉換成大寫字母。

ES_READONLY

將編輯框設置成只讀的。

ES_WANTRETURN

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

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

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

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

表6.7 與剪切板有關的CEdit成員函數

函數聲明

用途

void Clear( )

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

void Copy( )

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

void Cut( )

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

void Paste( )

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

BOOL Undo( )

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

 

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

abcd

efg

ij

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

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

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

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

char buf[40];

int total=MyEdit.GetLineCount();

int i,length;

for(i=0;i

{

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

buf[length]=0; //加字符串結束符

. . . . . .}

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

對于選擇正文的查詢和設置,應該利用函數GetSel、SetSel和ReplaceSel.

可以利用GetSel和SetSel來查詢和設置插入符的位置.SetSel可以使編輯框滾動到插入符的新位置.
要獲取插入符的行列坐標,可用下面的代碼實現:
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函數在 插入符處插入正文,典型的代碼如下所示:
MyEdit.SetSel(-1,0); //取消正文的選擇
MyEdit.ReplaceSel(“......”);

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

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

評論

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

謝謝  回復  更多評論   

廣告信息(免費廣告聯系)

中文版MSDN:
歡迎體驗

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久久久久久久久久一区 | 在线看片一区| 久久国产婷婷国产香蕉| 一区二区三区视频在线 | 久久精品日产第一区二区| 国产香蕉97碰碰久久人人| 久久精品九九| 久久蜜桃精品| av成人免费在线| 99在线热播精品免费99热| 国产精品国内视频| 久久久久久夜精品精品免费| 久久国产成人| 日韩午夜电影在线观看| 99精品欧美一区二区蜜桃免费| 欧美性大战久久久久| 午夜在线电影亚洲一区| 欧美在线观看www| 91久久中文| 亚洲欧美日韩成人高清在线一区| 激情综合色综合久久| 亚洲精品中文字幕在线| 国产美女精品视频| 欧美高清免费| 国产农村妇女毛片精品久久麻豆 | 欧美激情网站在线观看| 欧美色中文字幕| 麻豆av一区二区三区久久| 欧美久久久久久久| 久久久99免费视频| 欧美激情精品久久久六区热门 | 激情五月***国产精品| 亚洲第一在线综合网站| 欧美四级在线| 欧美高清在线| 国产美女高潮久久白浆| 亚洲精品久久久久久久久| 国产综合第一页| 一区二区国产在线观看| 亚洲激情视频在线| 午夜久久一区| 亚洲专区欧美专区| 欧美国产高清| 男同欧美伦乱| 国内一区二区三区在线视频| 99在线热播精品免费99热| 亚洲国产1区| 久久精品国产亚洲aⅴ| 一区二区三区国产精品| 免费一级欧美片在线观看| 久久国产精品久久久| 欧美日韩国产影院| 亚洲国产三级网| 亚洲国产成人tv| 欧美一区日韩一区| 宅男精品视频| 欧美日韩 国产精品| 欧美二区在线播放| 亚洲第一天堂av| 久久国产精品一区二区三区| 久久精品国产一区二区三| 国产精品久久久久久久久免费| 亚洲日本在线观看| 在线看欧美日韩| 久久国产精品一区二区三区| 久久成人免费视频| 国产麻豆精品视频| 午夜精品免费在线| 久久精品二区三区| 国产综合久久久久久鬼色| 亚洲欧美日韩中文视频| 欧美一区二区三区免费视频| 国产精品一区二区三区免费观看| 亚洲综合成人婷婷小说| 欧美一级视频一区二区| 国产精品一区=区| 香蕉久久夜色精品国产使用方法| 久久精品成人一区二区三区| 黑人巨大精品欧美黑白配亚洲| 欧美影院成人| 久久精品免费| 亚洲激情午夜| 欧美日韩国产综合视频在线| 一区二区国产精品| 久久精品国产在热久久| 国产一区二区三区久久 | 欧美日韩国产色综合一二三四 | 亚洲大片在线| 99精品视频免费观看视频| 欧美激情中文字幕一区二区| 日韩一级视频免费观看在线| 亚洲欧美激情四射在线日| 国产日韩欧美综合一区| 麻豆乱码国产一区二区三区| 亚洲毛片在线看| 久久精品日韩欧美| 最新国产の精品合集bt伙计| 欧美日韩一区三区四区| 久久国产婷婷国产香蕉| 亚洲激情精品| 香蕉久久夜色精品| 亚洲国产高清aⅴ视频| 欧美性色综合| 久久激五月天综合精品| 亚洲精品五月天| 久久久亚洲一区| 亚洲香蕉伊综合在人在线视看| 国产午夜精品全部视频播放| 欧美激情在线狂野欧美精品| 午夜精品久久| 99国产麻豆精品| 免费在线日韩av| 久久国产精品久久w女人spa| 一本色道久久综合狠狠躁篇怎么玩| 国产欧美日韩精品丝袜高跟鞋| 欧美激情1区| 久久九九免费| 亚洲欧美日韩国产中文| 亚洲黄色毛片| 久久综合久色欧美综合狠狠| 亚洲欧美日本精品| 日韩视频一区| 亚洲福利在线视频| 国产一区二区久久久| 国产精品v片在线观看不卡| 欧美h视频在线| 久久久精品tv| 久久se精品一区精品二区| 亚洲视频一区二区在线观看 | 欧美大片91| 久久久久久久高潮| 午夜免费久久久久| 一本色道综合亚洲| 日韩视频专区| 亚洲人线精品午夜| 亚洲国产精品久久| 亚洲高清激情| 在线观看国产精品网站| 红桃av永久久久| 国产在线成人| 狠狠操狠狠色综合网| 国产一区二区三区黄视频| 国产欧美一区二区三区久久人妖| 国产精品捆绑调教| 欧美午夜精品伦理| 欧美午夜电影在线观看| 欧美视频在线一区| 国产精品国产三级国产aⅴ无密码| 欧美日韩国产另类不卡| 欧美日韩精品久久| 欧美日韩一区二区三区四区五区| 欧美日韩网站| 国产精品久久久久免费a∨| 国产精品入口福利| 国产亚洲一区二区三区在线观看 | 在线一区二区三区四区| 夜色激情一区二区| 一本不卡影院| 亚洲一区中文| 久久精品国产综合| 老**午夜毛片一区二区三区| 老色批av在线精品| 亚洲第一中文字幕| 99国产精品久久久久久久成人热 | 欧美电影在线播放| 最新国产成人在线观看| 99re视频这里只有精品| 亚洲一区一卡| 久久一二三四| 欧美日韩一级大片网址| 国产日韩欧美高清| 亚洲国产免费| 亚洲免费视频网站| 久久人人爽人人| 亚洲激情视频网站| 亚洲一区二区成人在线观看| 久久成人免费| 欧美日韩亚洲一区二区三区在线观看| 国产精品一二三四| 尹人成人综合网| 亚洲欧美国产精品专区久久| 久久亚洲综合| 亚洲视频在线观看三级| 久久久久久色| 国产精品国产三级国产| 伊人成人开心激情综合网| 亚洲午夜在线观看视频在线| 久久夜色精品国产亚洲aⅴ | 久久综合九色99| 99精品热6080yy久久| 久久久久久国产精品mv| 国产精品h在线观看| 在线观看国产精品网站| 亚洲欧美日韩一区二区三区在线观看 | 欧美精品成人| 一区二区三区在线视频免费观看| 亚洲午夜一区二区三区| 欧美不卡视频一区| 欧美一级电影久久| 欧美色网在线|