例如:
DialogBox( m_hInst, (LPCTSTR)IDD_CPWChirldFrm, NULL, (DLGPROC)DlgProc);不知道怎样在对话框(IDD_CPWChirldFrm)中,响应键盘事件?

解决方案 »

  1.   

    BOOL DlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    switch(msg) {
    case WM_KEYDOWN:
    case WM_KEYUP:
    case WM_SYSKEYDOWN:
    case WM_SYSKEYUP:
    case WM_CHAR:
    break;
    }return FALSE;
    }
      

  2.   

    回Zhymax(蓝点),我都是这么写的,怎么按都没反应回:sungengyu(快乐机器),对话框的焦点通常都在上面的控件上,,那怎么拦截??谢谢,,能不能帮做个例题??^_^..........可加100分,,
      

  3.   

    BOOL CPageSelectcarmodel::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if (WM_KEYFIRST <= pMsg->message && pMsg->message <= WM_KEYLAST)  

    if(pMsg->wParam==VK_RETURN )//是回车
    {
    this->SendMessage(WM_USER_ENTER, NULL,NULL);
    }
    }
    return CDialog::PreTranslateMessage(pMsg);
    }
      

  4.   

    谢谢sbqjhipr ,,能不能帮转成sdk?
      

  5.   

    SDK没PreTranslateMessage这玩意,MFC是用Hook来做的,你也可以用Hook
      

  6.   

    适当地方调用下列形式的函数保证能满足你的要求!
    void DialHitKeyEvent()
    {
        MSG msg;
        for(;;)
        {
           int n=::GetMessage(&msg,hWnd,0,0);
           if(n==0||n==-1)
              goto exit_label;
           switch(msg.message)
           {
           case WM_KEYDOWN:
                 // Do something
                break;
           ..................
           default:
                ::DispatchMessage(&msg);
           }
        }
    exit_label:
        // Do something
    }