最近須要一個浮點數編輯框。所謂浮點數編輯框,就是限制輸入只在」-1234567890.」 這些字符,其它字符不予輸入(用戶輸錯了冒一個氣泡進行提示)。本想使用BCG庫的CBCGPMaskEdit類,無奈該類容許重複輸入小數點,不知足個人需求。html
因而上網搜了一個,發現是基於VS2010的。VS 2010的編輯框已經實現了自動冒泡提示了。可是個人工程是VS 2005的。因而我設法在VS 2005實現編輯框的冒泡提示。git
實際上這個也不難,主要是使用Edit_ShowBalloonTip宏。下面是編輯框的主體代碼:web
- BEGIN_MESSAGE_MAP(CMyFloatEdit, CEdit)
- ON_WM_CHAR()
- END_MESSAGE_MAP()
-
-
- void CMyFloatEdit::ShowBalloonTip(LPWSTR strTitile,LPWSTR strtext,UINT uStyle)
- {
- EDITBALLOONTIP ebt;
- ebt.cbStruct = sizeof(EDITBALLOONTIP);
- ebt.pszText = strtext;
- ebt.pszTitle = strTitile;
- ebt.ttiIcon = uStyle;
- Edit_ShowBalloonTip(GetSafeHwnd(),&ebt);
- }
-
-
-
- void CMyFloatEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
- {
-
-
-
- UpdateData(TRUE);
- CString strText;
- TCHAR ch = TCHAR(nChar);
-
-
- if ((ch<-1)||(ch>255))
- {
- return;
- }
-
- GetWindowText(strText);
- int i= GetSel();
- if(!_istdigit(ch))
- {
- int startSel,endSel;
- GetSel(startSel,endSel);
- if(ch == '.')
- {
- int minusPos;
- minusPos = strText.FindOneOf(_T("-"));
- if(strText.Find('.') != -1)
- {
- ShowBalloonTip(L"不能輸入字符",L"你只能輸入一個小數點",TTI_ERROR);
- return;
- }
- if ((startSel==0)||((startSel==1)&&(minusPos==0)))
- {
- ShowBalloonTip(L"不能輸入字符",L"先輸入整數部分",TTI_ERROR);
- return;
- }
-
- }
- else if (ch=='-')
- {
- if(startSel)
- {
- ShowBalloonTip(L"不能輸入字符",L"你只能在此處輸入數字或者小數點",TTI_ERROR);
- return;
- }
- if(strText.Find('-') != -1)
- {
- ShowBalloonTip(L"不能輸入字符",L"你只能輸入一次負號",TTI_ERROR);
- return;
- }
- }
- else if (ch>=0&&ch<=31)
- {
- ;
- }
- else
- {
- ShowBalloonTip(L"不能輸入字符",L"你只能在此處輸入數字或者小數點",TTI_ERROR);
- return;
- }
- }
- CEdit::OnChar(nChar, nRepCnt, nFlags);
- }
效果以下:windows
該編輯框兼容在unicode字符集和多字節字符集下使用。一個值得注意的問題是編輯框實現冒氣泡須要對話框開啓xp界面風格。在VS 2005下開啓xp界面風格一個很簡單的方法是在stdafx.h下添加以下代碼:app
- #if defined _M_IX86
- #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
- #elif defined _M_IA64
- #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
- #elif defined _M_X64
- #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
- #else
- #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
- #endif
有時unicode字符集工程下已默認添加了上述代碼。上述作法已在VS 2005上測試經過,VS 2005如下的VS 版本不肯定可否支持,VS 2005以上的VS版本應該能支持。ide
這個浮點數框類能夠稍加改造爲只支持整數的編輯框等(具體在OnChar函數修改)。函數
源碼工程請在此下載:PUDN下載。oop