Visual Studio .NET 2002Visual C++ 7.1Visual Studio 6Visual C++ 7.0Visual Studio .NET 2003Windows 2003Windows 2000Visual C++ 6.0Windows XPMFCIntermediateDevVisual StudioWindowsC++
CHexEdit 控件 - 用于十六进制和十进制数字输入






4.40/5 (12投票s)
2005年1月25日
2分钟阅读

108908

4289
一篇关于如何编写用于 HEX 和 DEC 数字输入的 Edit 控件的文章。
引言
最近,我正在开发一款诊断软件,需要一个用于 HEX/DEC 数字输入的 Edit 控件。MFC 自带的 CEdit
在这方面不太好,因为它不能阻止用户输入无效的 HEX 数字。
因此,我创建了从 CEdit
派生的 CHexEdit
控件,用于 HEX/DEC 数字输入,它非常易于使用。
CHexEdit 控件的特性
以下是 CHexEdit
类的特性
- 自动验证用户输入,并防止无效的 HEX/DEC 数字格式输入。
- 自动检测 HEX/DEC 数字,并通过着色文本来突出显示差异。
- 能够通过自带的菜单将 HEX 转换为 DEC 或将 DEC 转换为 HEX 数字。
- 重新定义 Paste、Cut、Delete、Copy 操作以避免无效输入。
- 通过其
GetValue()
/SetValue()
函数轻松管理输入值。 - 易于 MFC 开发者实现。
使用 CHexEdit 控件
要使用 CHexEdit
,您必须执行以下步骤
- 在您的应用程序中,为您的 Edit 控件添加一个控件变量。
- 在相应的 .h 文件中,将
CEdit
更改为CHexEdit
,如下所示public: CHexEdit m_cEdit;
- (可选)您可以在初始化应用程序时定义您自己的 HEX/DEC 数字背景/前景颜色。
m_cEdit.SetHexColor(RGB(255,255,255),RGB(0,0,0)); //black text color and white text background for hex number m_cEdit.SetDecColor(RGB(0,0,0),RGB(255,255,255)); //white text color and black text background for dec number
- (可选)您可以通过
SetValue(unsigned int _value,bool _bHex)
定义其默认数字。m_cEdit.SetValue(100,true); //set value to 100 using HEX format to express
- 您可以通过
GetValue()
获取输入值。
技术背景
CHexEdit
派生自 CEdit
,并且有三个修改,包括
- 验证用户输入。这通过覆盖
CEdit::PreTranslateMessage(MSG* pMsg)
来完成。当用户敲击一个键时,它会确定该键是否有效,并将输入的字母转换为大写,使数字看起来更好看。 - 重新定义
CEdit
的默认弹出菜单。由于用户不能一直进行复制、剪切、粘贴等操作,因此最好检查剪贴板缓冲区,并在数据不合适时将这些菜单项灰显。 - 获取输入数字类型 (HEX/DEC)。通过拦截
EN_UPDATE
消息,它会检查输入的数字是 HEX 还是 DEC,并自动对背景和前景进行着色。void CHexEdit::OnEnUpdate() { CStringtext; this->GetWindowText(text); //Hex or Dec? this->m_bHex=false; if(text.Find("0x")== 0) this->m_bHex=true; for(int i=0; i < text.GetLength(); i++) { char c=text.GetAt(i); if(c >= 'A' && c <= 'F') this->m_bHex=true; } this->RedrawWindow(); }
历史
- 2005 年 1 月 21 日 - v1.0 - 首次发布。