在制作十六进制文本编辑器的时候遇到这个问题。Edit编辑框如何只选择十六进制数据?CEdit类中的消息函数是固定的不可修改的,它接收键盘输入的字符时直接把字符传给了Edit编辑框。解决办法是生成一个新类,从CEdit类中派生一个新类CMyEdit,修改消息函数。当然需要用CMyEdit先实例化,再在对话框初始化的时候加入Edit_Hex.SubclassDlgItem(IDC_EDIT_HexDisplay,this);进行子类化。具体炒作方法:
1.从CEdit类派生一个新类CMyEdit
产生新的文件MyEdit.cpp和MyEdit.h,剩下的就是修改新的类的消息函数。
2.修改消息处理函数
在MyEdit.cpp中增加如下函数:
// CMyEdit 消息处理程序
BOOL CMyEdit::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
//switch()
if(pMsg->message==WM_CHAR)
{
int c=(int)pMsg->wParam;
if(c>=48&&c <=57||c>='A'&&c <='F')
{
last++;
if(last==2)
{
last=0;
SendMessage(WM_CHAR,32,0);
}
return CEdit::PreTranslateMessage(pMsg);
}
else if(c>='a'&&c <='f')
{
last++;
if(last==2)
{
last=0;
SendMessage(WM_CHAR,32,0);
}
pMsg->wParam-=32;
return CEdit::PreTranslateMessage(pMsg);
}
else
return TRUE;
}
return CEdit::PreTranslateMessage(pMsg);
}
3.在对话框文件的头文件新增CMyEdit对象
// 实现
protected:
HICON m_hIcon;
CMyEdit Edit_Hex;
4.在对话框初始化中增加子类化操作
在BOOL CUSBToolDlg::OnInitDialog()中增加如下:
Edit_Hex.SubclassDlgItem(IDC_EDIT_HexDisplay,this);
这样就OK了。
具体案例详见:
1.http://download.csdn.net/download/wudeshou82666/1664695
2.http://download.csdn.net/download/wudeshou82666/1664489