Visual Studio .NET 2002Visual C++ 7.1Visual C++ 7.0Windows 2003Windows 2000Visual C++ 6.0Windows XPMFC中级开发Visual StudioWindowsC++
本地化数字编辑框






4.08/5 (13投票s)
2003年8月12日
1分钟阅读

65646

2351
一篇关于扩展编辑框控件的文章。
引言
微软为开发者提供了丰富的 GUI 控件集合。编辑框控件非常有用,但有一个缺点:它不支持数值小数。本文描述了创建数值编辑框的过程。
背景
微软的控件是本地化的。例如,如果您从“区域设置”对话框更改本地时间格式,CDateTimeCtrl
会更改其时间格式。本文介绍的数值编辑框也是本地化的。在创建时,它会加载本地的小数点分隔符并使用它。以下是代码:
/// /// Constructor. /// CNumericEdit::CNumericEdit() { // determine the decimal delimiter buffer size const int nBuffLen = ::GetLocaleInfo( LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, NULL, 0 ); _ASSERT( nBuffLen > 0 ); // get the decimal number delimiter const int nResult = ::GetLocaleInfo( LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, m_strDelim.GetBuffer(nBuffLen), nBuffLen ); _ASSERT(nResult != 0); m_strDelim.ReleaseBuffer(); }
使用代码
您应该执行以下步骤:
- 将编辑框控件放置在对话框上。
- 将
CEdit
对话框类成员关联到编辑框控件。 - 将“NumericEdit.h”包含到您的对话框类头文件中。
- 将
CEdit
替换为CNumericEdit
。// // Example of using the code // #include "NumericEdit.h" // some code protected: // some code CNumericEdit m_editNumeric; // some code
关注点
微软关于 WM_SETTINGCHANGE
的说明:
当 SystemParametersInfo
函数更改系统范围设置或策略设置发生更改时,系统会将 WM_SETTINGCHANGE
消息发送到所有顶级窗口。
我检查过,它有效。目前,数值编辑框控件在创建时设置其本地化信息。如果控件能够响应操作系统更改会更好。但是,WM_SETTINGCHANGE
消息仅发送到顶级窗口,而不是子窗口。可能的解决方案是在主窗口中处理 WM_SETTINGCHANGE
消息,并将 WM_SETTINGCHANGE
消息委托给所有子窗口,但这看起来不太美观。我将继续寻找该问题的其他解决方案。
历史
- 2003年8月12日 - 代码的第一个版本。