void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(!::IsCharAlpha ((TCHAR)nChar)||nChar==VK_RETURN) //如果击键不是字母,或者是回车
{
if(nChar==VK_RETURN)
{
//do something!
}
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
}上面的程序是从我写过的程序中拿出来的,很好用的,你可以试一下!
{
if(!::IsCharAlpha ((TCHAR)nChar)||nChar==VK_RETURN) //如果击键不是字母,或者是回车
{
if(nChar==VK_RETURN)
{
//do something!
}
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
}上面的程序是从我写过的程序中拿出来的,很好用的,你可以试一下!
DOC/VIEW时
重载MAINFRAME类的PRETRANSLATEMESSAGE函数是dialog时
重载dialog类的PRETRANSLATEMESSAGE函数重载部分代码
:if(pMsg->message==WM_SYSKEYDOWN)
if(pMsg->wParam&VK_RETURN) Sendmessage(你的事件);
return TRUE;
在MyEdit::OnChar()里怎么不能处理VK_RETURN键?反正按回车
没有反应,代码如下:void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if (nChar == VK_RETURN )
{
MessageBox (strTemp);
strTemp.Delete (0,8);
CEdit::OnChar (nChar, nRepCnt, nFlags);
}
}
classwizard里重载dialog类的pretranslatemessage函数重载部分代码加入
if(pMsg->message==WM_SYSKEYDOWN)
if(pMsg->wParam&VK_RETURN) MessageBox ("ok?"); return TRUE;
if(pMsg->wParam==VK_RETURN)
MessageBox ("ok?");
return TRUE;
MFC会自动调用::TranslateMessage消息,你从CEdit派生出CMyEdit类
需要自己调用::TranslateMessage消息将击键消息转换为WM_CHAR消息,
可以在classwizard里重载dialog类的pretranslatemessage函数处理。
如果你的程序是一个对话框程序,你需要在OnInitDialog()中子类化一个编辑框类,这样操作后才可以把自定义的编辑框和普通编辑框同样对待,否则是不会调用你的那个CMyEdit::OnChar()的。假设你的编辑ID为IDC_EDIT,在OnInitDialog()中:
m_myedit.SubclassDlgItem (IDC_EDIT,this); 这样应该可以了