最近需要乙個浮點數編輯框。所謂浮點數編輯框,就是限制輸入只在」-1234567890.」 這些字元,其它字元不予輸入(使用者輸錯了冒乙個氣泡進行提示)。本想使用bcg庫的cbcgpmaskedit類,無奈該類允許重複輸入小數點,不滿足我的需求。
於是上網搜了乙個,發現是基於vs2010的。vs 2010的編輯框已經實現了自動冒泡提示了。但是我的工程是vs 2005的。於是我設法在vs 2005實現編輯框的冒泡提示。
[cpp]view plain
copy
print?
begin_message_map(cmyfloatedit, cedit)
on_wm_char()
end_message_map()
// 實現編輯框的冒泡提示
voidcmyfloatedit::showballoontip(lpwstrstrtitile,lpwstrstrtext,uintustyle)
// cmyfloatedit 訊息處理程式
voidcmyfloatedit::onchar(uintnchar,uintnrepcnt,uintnflags)
getwindowtext(strtext); // 獲得當前已輸入的字串行
inti= getsel();
if(!_istdigit(ch)) // 如果不是數字
if((startsel==0)||((startsel==1)&&(minuspos==0)))
}else
if(ch=='-'
)
if(strtext.find('-'
) != -1)
}else
if(ch>=0&&ch<=31)
else
} cedit::onchar(nchar, nrepcnt, nflags);
}
begin_message_map(cmyfloatedit, cedit)
on_wm_char()
end_message_map()
// 實現編輯框的冒泡提示
void cmyfloatedit::showballoontip(lpwstr strtitile,lpwstr strtext,uint ustyle)
// cmyfloatedit 訊息處理程式
void cmyfloatedit::onchar(uint nchar, uint nrepcnt, uint nflags)
getwindowtext(strtext); // 獲得當前已輸入的字串行
int i= getsel();
if(!_istdigit(ch)) // 如果不是數字
if ((startsel==0)||((startsel==1)&&(minuspos==0)))
}else if (ch=='-')
if(strtext.find('-') != -1)
}else if (ch>=0&&ch<=31)
else
}cedit::onchar(nchar, nrepcnt, nflags);
}
效果如下:
該編輯框相容在unicode字符集和多位元組字符集下使用。乙個值得注意的問題是編輯框實現冒氣泡需要對話方塊開啟xp介面風格。在vs 2005下開啟xp介面風格乙個很簡單的方法是在stdafx.h下新增如下**:
[cpp]view plain
copy
print?
#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
#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版本應該能支援。
這個浮點數框類可以稍加改造為只支援整數的編輯框等(具體在
onchar
函式修改)。
實現乙個冒泡提示的浮點數編輯框
最近需要乙個浮點數編輯框。所謂浮點數編輯框,就是限制輸入只在 1234567890.這些字元,其它字元不予輸入 使用者輸錯了冒乙個氣泡進行提示 本想使用bcg庫的cbcgpmaskedit類,無奈該類允許重複輸入小數點,不滿足我的需求。於是上網搜了乙個,發現是基於vs2010的。vs 2010的編輯...
實現乙個冒泡提示的浮點數編輯框
最近需要乙個浮點數編輯框。所謂浮點數編輯框,就是限制輸入只在 1234567890.這些字元,其它字元不予輸入 使用者輸錯了冒乙個氣泡進行提示 本想使用bcg庫的cbcgpmaskedit類,無奈該類允許重複輸入小數點,不滿足我的需求。於是上網搜了乙個,發現是基於vs2010的。vs 2010的編輯...
關於列印浮點數的乙個問題
在開發專案的時候,需要顯示金額數,例如 99.99 nslog 99.99 但是很坑爹的是,不知道為什麼,列印出來居然是99.98999999999999 2015 09 21 20 51 14.027 test 22562 295012 99.98999999999999很明顯這裡面少了0.000...