现在我们用的鼠标上大概有这几个键: 左键、 右键、 中键、 前进键、 后退键。 我想知道怎么响应鼠标上的前进键和后退键按下和弹起并计数?有没有类似于OnLButtonDown的消息函数?该如何处理? 

解决方案 »

  1.   

    nFlags
    Indicates whether various virtual keys are down. This parameter can be any combination of the following values:MK_CONTROL   Set if the CTRL key is down.MK_LBUTTON   Set if the left mouse button is down.MK_MBUTTON   Set if the middle mouse button is down.MK_RBUTTON   Set if the right mouse button is down.MK_SHIFT   Set if the SHIFT key is down.一般的鼠标没有前进键和后退键
      

  2.   

    捕获鼠标滚轮的   消息MSH_MOUSEWHEEL、WM_MOUSEWHEEL
      

  3.   


    一楼的这个不是响应键盘按键的吗?我上网查了下Windows消息大全 里面有
    WM_KEYDOWN = $0100; 
    //按下一个键
    WM_KEYUP = $0101; 
    //释放一个键
    这个好像是响应键盘的 对鼠标可以用吗?
      

  4.   

    怎么没有人回答了?
    LRESULT CFccTestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(message==523&&wParam==65568)
    {
           ForButtonDown();
       return CDialog::WindowProc(message, wParam, lParam);
    }
        if(message==524)
    {
           ForButtonUp();
       return CDialog::WindowProc(message, wParam, lParam);
    }
    我通过在dialog下添加WindowProc(),通过调试,得到当message==523&&wParam==65568为前进键按下的消息 当message==524是既响应前进键弹起 又响应后退键弹起 通过捕捉wParam的值设定后 还是同时响应两个按键的弹起 有哪位大侠知道这是怎么回事吗?这几天一直被这个问题困扰 希望能有高手出手相助 帮助菜鸟解决这两个按键问题
      

  5.   

    BOOL CFccTestDlg::PreTranslateMessage(MSG* pMsg)
    {
    if(pMsg->message==WM_KEYDOWN)
    {
    if(pMsg->wParam==VK_LEFT)//左键
    {
    }
    }
    return CDialog::PreTranslateMessage(pMsg);
    }
      

  6.   


    鼠标如 我个人空间的相册里 http://hi.csdn.net/space-9093429-do-album-picid-697791.html
      

  7.   

    通过debug 虽然两键功能基本实现但是还存在缺陷  先将代码贴出 希望对来者有帮助 同时也期待高手指教完善
    首先定义4个变量(记下按键按下和弹起的次数)
    int FourDown;
    int FourUp;
    int FiveDown;
    int FiveUp;初始化它们在窗口过程函数中处理
    LRESULT CFccTestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(message==523)
    {
    if(wParam==65568)//前进键按下
    {FourDown++;}
    else if(wParam==131136)//后退键按下
    {FiveDown++;}
       return CDialog::WindowProc(message, wParam, lParam);
    }    if(message==524)
    {
    if(wParam==131072)//后退键弹起
        { FiveUp++;}
    else if(wParam==65536)//前进键弹起
         {FourUp++; } 
    return CDialog::WindowProc(message, wParam, lParam);
    }    if(message==525)
    {
           if(wParam==65568)//前进键双击
       {
        FourDown++;
       }
       else if(wParam==131136)//后退键双击    {
       FiveDown++;
       }
       return CDialog::WindowProc(message, wParam, lParam);
    }
    return CDialog::WindowProc(message, wParam, lParam);}缺陷是两个按键同时按下时 如前进键先按下不放 再按后退键不放 接着释放前进键 最后释放后退键 此时只是响应了前进键按下+1 和 后退键弹起+1 也是就是只响应了第一个按下和最后的弹起 怎解?期待指导
      

  8.   

    两个按下了,估计MESSAGE就不同了,你SPY看看它是啥消息
      

  9.   


    用spy++,前进键先按下不放 再按后退键不放 接着释放前进键 最后释放后退键 得到的消息如下链接的截图http://hi.csdn.net/space-9093429-do-album-picid-700398.html
    似乎同时按下的消息都是一样的
      

  10.   

    楼主加油,支持女程序员,如果想了解这方面的知识,建议看<windows程序设计>