關(guān)注嵌入式操作系統(tǒng),移動(dòng)平臺(tái),圖形開發(fā)。-->加微博 ^_^
如何限制CRichEditCtrl換行飄飄白云 2008/03/19
用WTL在自制的窗口里加了個(gè)文本框,但要限制用戶輸入不能超過三行,即便是按enter或alt+enter換行也不能超過三行,瀏覽了下MSDN,實(shí)現(xiàn)這個(gè)功能,順便mark一下。
首先創(chuàng)建CRichEditCtrl對(duì)象,創(chuàng)建文本框,并設(shè)置相關(guān)的屬性(ES_MULTILINE必須要有),具體看代碼:
然后在父窗口的消息map中添加MSG_WM_NOTIFY的響應(yīng)函數(shù):
然后在OnNotify()中實(shí)現(xiàn)相應(yīng)的處理:
這里我們先來看看LPNMHDR這個(gè)東東(指向一個(gè)NMHDR結(jié)構(gòu)體),NMHDR的聲明如下:
其中hwndFrom就是這個(gè)消息的來源控件窗口句柄,idFrom就是控件的id,code是消息的通知碼。下面來看看具體怎么用,先判斷hwndFrom是否就是我們想要監(jiān)控的文本框控件,并且消息的通知碼要是EN_MSGFILTER(MSDN如是說:The EN_MSGFILTER message notifies a rich edit control's parent window of a keyboard or mouse event in the control. A rich edit control sends this notification message in the form of a WM_NOTIFY message.文本框控件通過WM_NOTIFY發(fā)送EN_MSGFILTER通知碼給父窗口,通知父窗口----文本框中有鍵盤或者鼠標(biāo)事件發(fā)生)這樣我們就可以確定這個(gè)消息確是來自我們想要監(jiān)控的文本框控件的按鍵消息,然后我們就可以把LPNMHDR轉(zhuǎn)換成MSGFILTER指針,來處理響應(yīng)或讓文本框控件忽略按鍵消息(這是我們?cè)谶@里想要的-如果行數(shù)大于指定數(shù)目,就忽略回車按鍵消息)。MSGFILTER結(jié)構(gòu)體包含來自文本框控件的鍵盤或鼠標(biāo)消息,定義如下:
nmhdr就是前面的講過的NMHDR結(jié)構(gòu)體,msg是一般的window消息(在這里特指按鍵消息或鼠標(biāo)消息),wParam和lParam就是消息的兩個(gè)參數(shù)。我們先判斷是按鍵消息,并且按下的是enter鍵,這是判斷當(dāng)前文本框的行數(shù)是不是已經(jīng)達(dá)到上限,如果是簡(jiǎn)單地將消息的wParam參數(shù)設(shè)置為0,這樣就修改了文本控件回車按鍵的消息從而達(dá)到控制行數(shù)的目的。
Powered by: C++博客 Copyright © 羅朝輝