是这样的
我新建了一个对话框,然后重载了PreTranslateMessage()来响应键盘消息
当按下回车时,弹出另一个对话框。可是我运行之后,新弹出的对话框一关闭就有错误。我查了一下好像是因为第一个对话框中弹出第二个对话框之后,还处在第一个对话框的消息循环中。。然后就出错了求教。。以下是重载PreTranslateMessage()的代码:
BOOL CSellDlg::PreTranslateMessage(MSG*   pMsg)    
{
if   ((pMsg->message   ==   WM_KEYDOWN)&&   (pMsg->wParam   ==   VK_RETURN))   //键盘按下并且为回车键
{         
CChargeDlg CDlg;   //第二个对话框
CDlg.DoModal();    //显示 }
return  CDialog::PreTranslateMessage(pMsg);   
}

解决方案 »

  1.   

    if ((pMsg->message == WM_KEYDOWN)&& (pMsg->wParam == VK_RETURN)) //键盘按下并且为回车键
    {
       PostMessage();
    }发送一个自定义消息,然后消息处理函数中弹出对话框
      

  2.   

    或则你试试把DoModal 重在下 在里面销毁对话框,去掉默认的操作
      

  3.   

    在你的CDlg.DoModal(); //显示
    这个语句之后,加个return 1;就可以了
      

  4.   

    你DoModal时,PreTranslateMessage(MSG* pMsg)函数不就阻塞了吗?
      

  5.   

    PreTranslateMessage要返回BOOL值的,
    在CDlg.DoModal(); //显示后面加上return TRUE;就好了