现在我有4个按钮:IDC_BUTTON1,IDC_BUTTON2,IDC_BUTTON3,IDC_BUTTON4
想分别实现按钮一直按下去执行动作,松开按钮中止执行。查过资料大体是处理WM_LBUTTONDOWN和WM_LBUTTONUP消息,现在我不是很明白,如何区分我按的具体是那个按钮?麻烦给解答一下,最好有代码可以参考,谢谢了!

解决方案 »

  1.   

    你派生自CButton类,添加处理WM_LBUTTONDOWN、WM_LBUTTONUP消息,区分可以通过HWND或者GetDlgItemCtrl()得到ID来区分
      

  2.   

    干脆自己写个CMyButton类吧,自己定义鼠标按下,抬起响应事件
      

  3.   

    我派生自CButton类,生成了新的 CMyButton类,也添加处理WM_LBUTTONDOWN、WM_LBUTTONUP消息。现在是我不知道下一步怎么办了?我菜啊
      

  4.   

    WM_LBUTTONDOWN、WM_LBUTTONUP 按下,弹起,.有两个响应事件的嘛.
      

  5.   

    VC6下使用向导让4个按钮都与CButton类关联(添加4个控件变量),再将CButton改为CMyButton
      

  6.   

    void CMyButton::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    GRC_TYPE rc;
    MOT_COM_PAIR RefOmega; //获取应用程序指针
    CGeoMonitorApp *app = (CGeoMonitorApp *)AfxGetApp(); // stop controller and any possible movements
    (void) MOT_StopController(MOT_NORMAL);
    // start controller; the only valid mode for SetVelocity is MOD_OCONST
    rc = MOT_StartController(MOT_OCONST); switch (this->GetFocus()->GetDlgCtrlID())
    {
    case IDC_BUTTON_UP:
    if (rc == GRC_OK)
    {
    RefOmega.adValue[0] = 0;
    RefOmega.adValue[1] = float(app->m_VeloUpDown)/100;
    rc = MOT_SetVelocity(RefOmega);
    }
    break;
    case IDC_BUTTON_DOWN:
    if (rc == GRC_OK)
    {
    RefOmega.adValue[0] = 0;
    RefOmega.adValue[1] = - float(app->m_VeloUpDown)/100;
    rc = MOT_SetVelocity(RefOmega);
    }
    break;
    case IDC_BUTTON_LEFT:
    if (rc == GRC_OK)
    {
    RefOmega.adValue[0] = float(app->m_VeloLeRi)/100;
    RefOmega.adValue[1] = 0;
    rc = MOT_SetVelocity(RefOmega);
    }
    break;
    case IDC_BUTTON_RIGHT:
    if (rc == GRC_OK)
    {
    RefOmega.adValue[0] = - float(app->m_VeloLeRi)/100;
    RefOmega.adValue[1] = 0;
    rc = MOT_SetVelocity(RefOmega);
    }
    break;
    if (rc == GRC_OK)
    { }
    }
    CButton::OnLButtonDown(nFlags, point);
    }
    为什么以第一点击按钮不起作用,第二次点击才起作用呢?
      

  7.   

    http://download.csdn.net/detail/RobertBaker/3208359
      

  8.   

    感觉好像有这个方法可以解决
    http://topic.csdn.net/u/20110924/16/50deed44-92fa-4907-8904-f7d5758da39e.html
    不知道还有没有更有效的办法