65.9K
CodeProject 正在变化。 阅读更多。
Home

本地化数字编辑框

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.08/5 (13投票s)

2003年8月12日

1分钟阅读

viewsIcon

65646

downloadIcon

2351

一篇关于扩展编辑框控件的文章。

NumericEdit

引言

微软为开发者提供了丰富的 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();    
}

使用代码

您应该执行以下步骤:

  1. 将编辑框控件放置在对话框上。
  2. CEdit 对话框类成员关联到编辑框控件。
  3. 将“NumericEdit.h”包含到您的对话框类头文件中。
  4. 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日 - 代码的第一个版本。
© . All rights reserved.