在製作十六進制文本編輯器的時候遇到這個問題。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