要重载PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(pMsg->message==WM_KEYDOWN) { switch(pMsg->wParam) { case VK_RETURN: return true; case VK_ESCAPE: //这里做回车相应的处理 } } return CDialog::PreTranslateMessage(pMsg); }
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_KEYDOWN)
{
switch(pMsg->wParam)
{
case VK_RETURN:
return true;
case VK_ESCAPE:
//这里做回车相应的处理
}
} return CDialog::PreTranslateMessage(pMsg);
}
需要如何重载PreTranslateMessage(MSG* pMsg)
//////////////////////////////////////////
我的是基于 Dialog的工程,
需要如何重载PreTranslateMessage(MSG* pMsg)
这样做会把正常的回车也过滤掉,
比如你在一个允许回车的TextBox中输入文字时
应该不会把正常的回车过滤掉,可以只当当前焦点在这个combobox上的时候执行刷新动作。
可以像下面这样做:
if((VK_RETURN == pMsg->wParam) && (WM_KEYDOWN == pMsg->message)){
UpdateData(TRUE);
HWND hWnd = ::GetFocus();
int nID = ::GetDlgCtrlID(hWnd);
if( IDC_COMBOBOX == nID){
//do somthings
.......................
}
}
仅供参考。
只要重载OnOk,去掉CDialog.OnOk(),
那么按回车就不会关闭了。
同时有一个副作用:按那个确认按钮也不再关闭了,
你把ID为IDOK的按钮删了,添一个按钮,别叫IDOK了就可以了。