选中对话框,点击"Enter"键,对话框消失了,怎么办? 最近在搞一个项目,有一个对话框使用Create()方法创建的,但当选中对话框后,点击“Enter”键,对话框竟无缘无故的消失了,想问一下这时怎么回事?怎样修改代码,使得点击Enter键时,对话框不会消失。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 重载该函数PreTranslateMessageBOOL CAFZBDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class char szName[128]; long lStyle; memset(szName, '\0', sizeof(szName)); GetClassName(pMsg->hwnd, szName, sizeof(szName)); lStyle = ::GetWindowLong(pMsg->hwnd, GWL_STYLE); if(pMsg->message==WM_KEYDOWN) { if (strcmp(szName, "Button") == 0 || lStyle&ES_MULTILINE) { return CDialog::PreTranslateMessage(pMsg); } switch(pMsg->wParam) { case 0x0d: // CR pMsg->wParam=VK_TAB; break; case VK_DOWN: pMsg->wParam=VK_TAB; break; case VK_UP: keybd_event(VK_SHIFT,0,0,0); keybd_event(VK_TAB,0,0,0); keybd_event(VK_TAB,0,KEYEVENTF_KEYUP,0); keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0); break; } } return CDialog::PreTranslateMessage(pMsg);} 焦点在对话框上吗?用domodal看看 重载对话框的OnOK()函数,里面什么也不写CMyDlg::OnOK(){//什么也不写}对话框的默认焦点在OK按钮上 重载对话框的PreTranslateMessage函数,在其中BOOL C***Dlg::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; } } return CDialog::PreTranslateMessage(pMsg);}即可 gufengduyu(聪明的呆呆龙) ( ) 说得对 //CDialog::OnOk()注释掉这句就可以了 如何处理跳出来的AfxMessageBox 请教这样的错误是什么? 如何实现类似Visual Studio2005的客户区属性页,初学者,不知表达的对不对? 请问DLL回调函数有时不能立即响应?怎解决呀!见代码? 能否在视图的OnInitialUpdate中使工具栏重绘 这个错误应该怎样解决? 在程序中如何禁用设备? 如何改这个内存泄露,急急 拿到计算机专业的工程硕士毕业证对于找工作是否有帮助? activeX--打印!! 求救!!大虾 郁闷,打印预览有,打印极大出来却没有 MFC DLL 工程的问题
PreTranslateMessageBOOL CAFZBDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
char szName[128];
long lStyle;
memset(szName, '\0', sizeof(szName));
GetClassName(pMsg->hwnd, szName, sizeof(szName));
lStyle = ::GetWindowLong(pMsg->hwnd, GWL_STYLE);
if(pMsg->message==WM_KEYDOWN)
{
if (strcmp(szName, "Button") == 0 || lStyle&ES_MULTILINE)
{
return CDialog::PreTranslateMessage(pMsg);
}
switch(pMsg->wParam)
{
case 0x0d: // CR
pMsg->wParam=VK_TAB;
break;
case VK_DOWN:
pMsg->wParam=VK_TAB;
break;
case VK_UP:
keybd_event(VK_SHIFT,0,0,0);
keybd_event(VK_TAB,0,0,0);
keybd_event(VK_TAB,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);
break;
}
} return CDialog::PreTranslateMessage(pMsg);
}
CMyDlg::OnOK()
{
//什么也不写
}对话框的默认焦点在OK按钮上
BOOL C***Dlg::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;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
即可
说得对