基于对话框窗体的主窗口,如何响应键盘和鼠标事件?请高手赐教!谢谢!

解决方案 »

  1.   

    keyboard:
    use PreTranslateMessage
      

  2.   

    键盘:
    Class Wizard ——〉WM_DEYDOWN 创建OnKeyDown函数;
    鼠标:
    Class Wizard ——〉WM_MOUSEMOVE 创建OnMouseMove函数;
    .......
      

  3.   

    谢谢二位
    我采用的是添加“add windows messages handel"
    “OnKeyDown(nChar, nRepCnt, nFlags)
    但是程序没有响应
      

  4.   

    PreTranslateMessage(MSG* pMsg) //函数
    {
    if(pMsg->message==WM_KEYDOWN
    {
            if(pMsg->wParam==1)
                {
                     //do 
               }
    }
    }
      

  5.   

    谢谢 zhuwenzheng() 大虾
    我采用你的方法
    但是结果还是没有响应
      

  6.   

    LRESULT CToolDlgDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    {
    switch(message)
    {
    case WM_MOUSEMOVE:
    break;
    case WM_KEYDOWN:
    break;
             default :
    break;
    }
    }
      

  7.   

    如何在对话框中响应键盘按键我们首先想到的是响应WM_KEYDOWN消息,但实际运行却发现没有任何效果。
    原因是对话框里的控件需要首先对按键作出响应,比如多行编辑框必须首先
    处理回车,不至于回车使对话框关闭。
    我们要想在第一时间对对话框的按键做出响应,需要重载PreTranslateMessage,
    以下的代码实现了在对话框中显示虚拟键值(virtual-key code)
    BOOL CTestDlg::PreTranslateMessage(MSG* pMsg) 

    if(pMsg->message == WM_KEYDOWN) 

    ///或者直接调用OnKeyDown 
    CString strwParam; 
    strwParam.Format("%d ",pMsg->wParam); 
    CDC* pDC = GetDC(); 
    pDC->TextOut(10,10,strwParam); 
    ReleaseDC(pDC); 

    return CDialog::PreTranslateMessage(pMsg); 
    }此方法也适用于FORMVIEW或其它控件中对键盘按键的响应,以下的代码来自MSDN,
    实现了当按下上下左右方向键时调用OnKeyDown,我们可以在OnKeyDown中作相应处理。 BOOL CSampleControl::PreTranslateMessage(LPMSG lpmsg) 
    {
    BOOL bHandleNow = FALSE;
    switch (lpmsg->message)
    {
    case WM_KEYDOWN:
    switch (lpmsg->wParam)
    {
    case VK_UP:
    case VK_DOWN:
    case VK_LEFT:
    case VK_RIGHT:
    bHandleNow = TRUE;
    break;

    if (bHandleNow) 
    OnKeyDown(lpmsg->wParam, LOWORD(lpmsg ->lParam), HIWORD(lpmsg->lParam)); 
    break; 

    return bHandleNow; 

      

  8.   

    谢谢 zhuwenzheng
    我调试了你的方法
    的确可以响应键盘事件
    但是我现在有一个问题:我在写一个程序,当按下“ESC”键时,让它响应另外一个事件
    我在单文档窗口中调试是成功的
    但不知道在对话框窗体中为什么不响应?
      

  9.   

    你可能没有把DEFAULT的ESC屏蔽掉,解决方法:
    [问题提出]
    对话框程序ESC和ENTER健会导致程序退出,在程序进行中不响应ESC,Enter键应该怎么做?[问题解答]
    BOOL CCXXX::PreTranslateMessage(MSG* pMsg) 
    {
        if(pMsg->message == WM_KEYDOWN)
        {
            switch(pMsg->wParam)
            {
            case VK_RETURN://屏蔽回车
                return TRUE;
            case VK_ESCAPE://屏蔽Esc
                return TRUE;
            }
        }
        return CDialog::PreTranslateMessage(pMsg);