MFC中的Edit控件用于輸入數(shù)據(jù),當(dāng)輸入的數(shù)據(jù)為大段數(shù)字的時候,全選功能就顯得很重要了,可偏偏在MFC中Edit控件就不支持全選,Ctrl+A不行,雙擊也不行。Ctrl+C和Ctrl+V都是默認(rèn)支持的,因此為了使用方便,我們只能自己讓Edit去支持Ctrl+A全選功能了。
實現(xiàn)的方式也比較簡單,自己處理消息就是!Ctrl+A是一個組合消息,在檢測到A或者a按鍵按下的時候,判斷Ctrl鍵的狀態(tài),如果Ctrl鍵有效則說明用戶按下了Ctrl+A按鍵,這時候我們將Edit中內(nèi)容設(shè)置為全選即可。
為了避免對使用的Edit一個個的進(jìn)行處理,我們直接對MFC的CEdit類動手,在《通過派生CEdit類實現(xiàn)在VC的edit控件里輸入小數(shù)》中,知蟻也曾經(jīng)做過類似的操作,我們這里采用相似的方法,那就是——通過從CEdit類派生一個新類CEditEx類讓Edit支持Ctrl+A全選功能。
《通過派生CEdit類實現(xiàn)在VC的edit控件里輸入小數(shù)》演示了如何利用vc6.0添加一個派生類,本文將采用vs2008添加一個派生類,依次選擇:
項目(P)->添加類(C)…
類別選“MFC”,模板選擇“MFC類”,選好后,點(diǎn)擊“添加(A)”按鈕得到下面界面。
按照圖中所示,點(diǎn)擊完成即可!
在CEditEx類中,重寫PreTranslateMessage函數(shù),為了支持雙擊全選功能,我們同時處理WM_LBUTTONDBLCLK消息,這樣在Edit中通過雙擊也可以實現(xiàn)全選功能了。具體代碼如下:
使CEditEx類生效也比較簡單,通過類向?qū)閷υ捒蛑兴行枰С諧trl+A全選功能的Edit添加一個CEditEx類型的控件變量即可!
原創(chuàng)文章請注明轉(zhuǎn)載于知蟻博客,本文地址:http://www.letuknowit.com/archives/142