我使用PreTranslateMessage 进行 按钮 按下和弹起的函数响应
但是现在发现一个问题
就是 按钮 多按下弹起几次  按钮 就处于一种状态 就是 按下弹起 失效 但是 鼠标划过那里就 有按钮按下凹下的 (此时 按下 弹起 函数没有响应) 我使用 显示 桌面 快捷键 刷新一下 回来就好了
再按下去还是老问题。。寻求解决办法 附 代码:BOOL AutoFocus::PreTranslateMessage(MSG* pMsg) 
{
// TODO: Add your specialized code here and/or call the base class
AutoFocus *mainDialog = (AutoFocus *)GetParent();
// static flag = TRUE; if (pMsg->message == WM_LBUTTONDOWN &&pMsg->hwnd == ((CButton*)this->GetDlgItem(IDC_ZoomIn))->m_hWnd)

GetDlgItem(IDC_ZoomIn)->SetFocus(); pCflyUSB->ZMInOut(ZOOM_IN);

 return TRUE;
}

if (pMsg->message == WM_LBUTTONUP &&pMsg->hwnd == ((CButton*)this->GetDlgItem(IDC_ZoomIn))->m_hWnd)
{  
//  MessageBox(",,333,"); pCflyUSB->ZMInOut(ZOOM_STOP); return TRUE;
}
if (pMsg->message == WM_LBUTTONDOWN &&pMsg->hwnd == ((CButton*)this->GetDlgItem(IDC_ZoomOut))->m_hWnd)
{  
GetDlgItem(IDC_ZoomOut)->SetFocus();
pCflyUSB->ZMInOut(ZOOM_OUT);
    return TRUE;
}
if (pMsg->message == WM_LBUTTONUP &&pMsg->hwnd == ((CButton*)this->GetDlgItem(IDC_ZoomOut))->m_hWnd)
{  
pCflyUSB->ZMInOut(ZOOM_STOP);

  return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);

解决方案 »

  1.   

    你不要放在PreTranslateMessage(MSG* pMsg) 
    里面,在这里面处理可能会有问题.放到ONLBUTTONDOWN和ONLBUTTONUP里面判断啊.
      

  2.   

    顶楼上
    你处理WM_LBUTTONDOWN的时候直接return TRUE了,基类的OnLButtonDown没有调到,导致按钮行为不正常
      

  3.   

    听各位建议重载了cbutton之后  怎么 点击那里都响应?
    还有我有两个按键 都要 按下 弹起 要如何判断 获得的句柄ID??
    void MyButton::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    // if((CButton*)this->GetDlgItem(IDC_ZoomIn))
     
    MessageBox("up"); CButton::OnLButtonDown(nFlags, point);
    }void MyButton::OnLButtonUp(UINT nFlags, CPoint point) 
    { CButton::OnLButtonUp(nFlags, point);
    }
      

  4.   

    在MyButton类中添加int m_nButtonID用来识别不同的按钮吧,在创建按钮的时候给它赋值就好。
    然后在LButtonDown和LButtonUp中根据m_nButtonID的值进行操作。
      

  5.   

    int m_nButtonID;我定义了 
    但是获得当前ID 用哪个函数
    int buID;
    MSG* pMsg;
    buID= GetWindowLong(pMsg->hwnd,GWL_ID);
      if(buID == 1072)
        {
    ww++;
    }
    错误。。
      

  6.   

    还有一个问题 怎么按下去buttondown时候 不按在按钮上也相应?
      

  7.   

    可以不用控件的ID值,自己定义一个ID就好,比如1和2,分别表示按钮的ID。比如有两个按钮变量m_btn1和m_btn2,你在他们的初始化函数(自己添加,比如Init(int nButtonID))里面让m_nButtonID初始化化为nButtonID就可以了,这样你在消息处理函数里面就可以根据按钮的ID来进行操作。
    在按钮外面点击应该不会响应按钮点击事件的,一定是你程序中写错什么东西了。
      

  8.   

    PreTranslateMessage(MSG* pMsg) 
      

  9.   

    一般都是重载CButton::DrawItem()函数的,设置一个flag来标识按下和弹起的状态,然后在DrawItem里面根据flag来绘图
      

  10.   

    好像还是有点迷茫,按钮外面点击应该不会响应按钮点击事件 是的--我是因为使用了 massgebox 的缘故谢谢!!
      

  11.   

    问题已经解决  重载了cbutton