實現乙個冒泡提示的浮點數編輯框

2021-09-30 10:45:07 字數 4228 閱讀 3629

最近需要乙個浮點數編輯框。所謂浮點數編輯框,就是限制輸入只在」-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...