如何让自己创建的模态对话框响应键盘的ESC或者ENTER键?十万火急,求教高人!

解决方案 »

  1.   

    Enter 对应“确定”、Esc 对应“取消”?
    只需要将他们的ID分别设为:IDOK、IDCANCEL,然后在他们的Style中选中“默认按钮”即可
      

  2.   

    好像不可以,再者说我想响应A键或者B键该如何处理,就是如何响应WM_KEYDOWN消息?
      

  3.   

    想应ESC或者ENTER键,fengqinggao(风清高)的办法就行.
    要是响应别的键 . 看看我的代码吧.我只做了 四个方向键. 
    BOOL CKJComDlg::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_UP:
    MessageBox("上键头");
    break;
    case VK_DOWN:
    MessageBox("下键头");
    break;
    case VK_LEFT:
    MessageBox("左键头");
    break;
    case VK_RIGHT:
    MessageBox("右键头");
    break; }
    } return CDialog::PreTranslateMessage(pMsg);
    }
      

  4.   

    这是我在对话框里处理这两个消息,不想让按Esc和Entry之后对话框关闭!BOOL CMyDlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if (pMsg->message == WM_KEYDOWN && (pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_RETURN))
    return TRUE;

    return CDialog::PreTranslateMessage(pMsg);
    }
      

  5.   

    我用的sdk,代码如下:
    LRESULT CALLBACK ServDlgConf(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
    switch(message)
    {
    case WM_COMMAND:
    switch(LOWORD(wParam))
    {
    case IDCANCEL:
    EndDialog(hDlg,LOWORD(wParam));
    return TRUE;
    }
    break;
    case WM_KEYDOWN:
    switch(wParam)
    {
    case VK_ESCAPE :
    MessageBox(hDlg,"","",MB_OK);
    break;
    }
    break;
    }
    return FALSE;
    }
    /////////////
    对话框为模式,按下任何键都会发出嘟嘟的声音,不知道是否响应了WM_KEYDOWN消息,没有任何消息框弹出。