void CEditHex::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if(nChar>='a'&&nChar<='f')
{
nChar=nChar+'A'-'a';
SendMessage(WM_CHAR,nChar,nFlags);
return;
}
if(('0'<=nChar&&nChar<='9')||('A'<=nChar&&nChar<='F')||nChar==VK_BACK)
CEdit::OnChar(nChar,nRepCnt,nFlags);
}
用这个方法是不是要重写一个edit 控件?
有没有方法可以直接在dialog程序里面实现editbox只能输入16进制?
{
// TODO: Add your message handler code here and/or call default
if(nChar>='a'&&nChar<='f')
{
nChar=nChar+'A'-'a';
SendMessage(WM_CHAR,nChar,nFlags);
return;
}
if(('0'<=nChar&&nChar<='9')||('A'<=nChar&&nChar<='F')||nChar==VK_BACK)
CEdit::OnChar(nChar,nRepCnt,nFlags);
}
用这个方法是不是要重写一个edit 控件?
有没有方法可以直接在dialog程序里面实现editbox只能输入16进制?
{
if( pMsg->hwnd == GetDlgItem(IDC_EDIT_TEXT)->GetSafeHwnd() && pMsg->message == WM_KEYDOWN ){
char c = (char)pMsg->wParam;
if( (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') ){
}
else{
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
BOOL PreTranslateMessage( MSG *pMsg );
在.cpp文件里加上上面一段就行了
IDC_EDIT_TEXT
不同的editbox会有不同的ID啊
还有
在哪触发这个函数呢?
如果有多个这样的控件的话可以考虑从CEdit派生类。
还有delete和back 键怎样写进去呢?
if( (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') || c == VK_BACK)要加入其它有效的键照着改就行