• <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>

            羅朝輝(飄飄白云)

            關注嵌入式操作系統,移動平臺,圖形開發。-->加微博 ^_^

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              85 隨筆 :: 0 文章 :: 169 評論 :: 0 Trackbacks

            如何限制CRichEditCtrl換行
            飄飄白云 2008/03/19


            用WTL在自制的窗口里加了個文本框,但要限制用戶輸入不能超過三行,即便是按enter或alt+enter換行也不能超過三行,瀏覽了下MSDN,實現這個功能,順便mark一下。

            首先創建CRichEditCtrl對象,創建文本框,并設置相關的屬性(ES_MULTILINE必須要有),具體看代碼:

            WTL::CRichEditCtrl m_recText;

            m_recText.Create(
            *this, m_rcText, L"", WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_MULTILINE, 0);

            ......

            m_recText.LimitText(
            30);
            m_recText.SetEventMask(ENM_KEYEVENTS);        
            //在這里設置將文本框的按鍵消息發送給父窗口(MSG_WM_NOTIFY)

            然后在父窗口的消息map中添加MSG_WM_NOTIFY的響應函數:

            BEGIN_MSG_MAP_EX(ModifyPlayerExplImpl)
             ...
             MSG_WM_NOTIFY(OnNotify)
             ....
            END_MSG_MAP()

            然后在OnNotify()中實現相應的處理:

                LRESULT OnNotify(int nID, LPNMHDR pnmh)
                
            {
                    
            if (pnmh->hwndFrom == m_recText && pnmh->code == EN_MSGFILTER) {
                        MSGFILTER
            * msgFilter = (MSGFILTER *) (pnmh);
                        
            if (msgFilter->msg == WM_KEYDOWN && msgFilter->wParam == VK_RETURN) {
                            
            if (m_recText.GetLineCount() >= 3{
                                msgFilter
            ->wParam = 0;
                            }

                        }

                    }


                    
            return 0;
                }

            這里我們先來看看LPNMHDR這個東東(指向一個NMHDR結構體),NMHDR的聲明如下:

            typedef struct tagNMHDR
            {
                HWND      hwndFrom;
                UINT_PTR  idFrom;
                UINT      code;         
            // NM_ code
            }
               NMHDR;
            typedef NMHDR FAR 
            * LPNMHDR;

            其中hwndFrom就是這個消息的來源控件窗口句柄,idFrom就是控件的id,code是消息的通知碼。下面來看看具體怎么用,先判斷hwndFrom是否就是我們想要監控的文本框控件,并且消息的通知碼要是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發送EN_MSGFILTER通知碼給父窗口,通知父窗口----文本框中有鍵盤或者鼠標事件發生)

            這樣我們就可以確定這個消息確是來自我們想要監控的文本框控件的按鍵消息,然后我們就可以把LPNMHDR轉換成MSGFILTER指針,來處理響應或讓文本框控件忽略按鍵消息(這是我們在這里想要的-如果行數大于指定數目,就忽略回車按鍵消息)。MSGFILTER結構體包含來自文本框控件的鍵盤或鼠標消息,定義如下:

            typedef struct _msgfilter {
                NMHDR nmhdr;
                UINT msg;
                WPARAM wParam;
                LPARAM lParam;
            }
             MSGFILTER;


            nmhdr就是前面的講過的NMHDR結構體,msg是一般的window消息(在這里特指按鍵消息或鼠標消息),wParam和lParam就是消息的兩個參數。

            我們先判斷是按鍵消息,并且按下的是enter鍵,這是判斷當前文本框的行數是不是已經達到上限,如果是簡單地將消息的wParam參數設置為0,這樣就修改了文本控件回車按鍵的消息從而達到控制行數的目的。

            if (msgFilter->msg == WM_KEYDOWN && msgFilter->wParam == VK_RETURN) {
                
            if (m_recText.GetLineCount() >= 3{
                 msgFilter
            ->wParam = 0;
                }

               }
            posted on 2008-03-18 23:23 羅朝輝 閱讀(3506) 評論(2)  編輯 收藏 引用 所屬分類: Windows

            評論

            # re: 如何限制文本框換行 2008-05-30 23:04 hoodlum1980
            還有ctrl-v,粘貼,也是需要控制的。  回復  更多評論
              

            中文字幕乱码人妻无码久久| 欧美亚洲另类久久综合婷婷| 久久精品蜜芽亚洲国产AV| 亚洲国产精品无码久久| 精品永久久福利一区二区| 久久国产成人精品麻豆| 亚洲精品WWW久久久久久| 777米奇久久最新地址| 久久精品国产色蜜蜜麻豆| 无遮挡粉嫩小泬久久久久久久| 嫩草影院久久99| 伊人久久大香线蕉精品不卡| 国产精品青草久久久久婷婷 | 2021精品国产综合久久| 久久99精品久久久久久不卡| 亚洲va中文字幕无码久久不卡| 精品一久久香蕉国产线看播放| 午夜精品久久久久久毛片| 亚洲精品99久久久久中文字幕| 97超级碰碰碰碰久久久久| 久久综合给合久久国产免费| 亚洲Av无码国产情品久久| 久久se精品一区二区影院| 久久国产高清字幕中文| 久久99国内精品自在现线| 思思久久99热只有频精品66| 国产精品熟女福利久久AV| 亚洲国产天堂久久综合网站| 久久人爽人人爽人人片AV| 久久久国产打桩机| 久久毛片免费看一区二区三区| 色综合久久天天综合| 狠狠色丁香婷婷综合久久来| 国产Av激情久久无码天堂| 婷婷久久香蕉五月综合加勒比| 国内精品人妻无码久久久影院导航| 色天使久久综合网天天| 中文字幕无码久久人妻| 亚洲国产成人久久笫一页| 偷偷做久久久久网站| 99精品国产综合久久久久五月天|