一个按钮处于正常状态,如何屏蔽它的消息使鼠标在按钮上的操作无效(和CButton.EnableWindow()时的鼠标操作效果一样)?

解决方案 »

  1.   

    派生子类重载DrawItem函数。自己重新绘制,使得无效时的按钮和有效时候的显示是一样的。将button设置为Enable = false
      

  2.   

    重载PreTranslateMessage函数,截取鼠标消息
      

  3.   

    派生一个CButton的子类负责处理。
      

  4.   

    BOOL CTest6Dlg::PreTranslateMessage(MSG* pMsg) 
    {
    if( pMsg->message == WM_LBUTTONDOWN  || pMsg->message == WM_LBUTTONUP) 

    if(pMsg->hwnd == GetDlgItem(IDC_BUTTON1)->m_hWnd)
    {
    return TRUE;
    }
    } return CDialog::PreTranslateMessage(pMsg);
    }
      

  5.   

    还可以有
    WM_LBUTTONDBLCLK以及右键
    WM_RBUTTONDOWN等等
      

  6.   

    按钮在鼠标点击的时候有“按下”和弹起的变化,不知道楼主只是不让按钮有任何响应呢还是按钮点上去根本就“不动”?如果只是简单的屏蔽按钮点击,则在按钮Click消息中啥都不做就可以了,这个可以用一个标志来判断,可以避免正常的操作!
    比如:
    CMyDialog::OnMyButtonClicked()
    {
      if(m_bCanClicked)
      {
        DoSomething();
      }
      else
      {
         return ;
      }
    }
    如果连按钮动画都没有的话,则麻烦一点,可以创建一个透明的对话框,对话框大小为按钮大小,罩在按钮上面。没有做过,提供思路!
      

  7.   

    使鼠标在按钮上的操作无效:如果鼠标点下去,按钮跟着下去这也能叫无效吗?    我的意思就是按钮什么动作都不做,鼠标的动作对该按钮来说相当于是不全在的。CButton.EnableWindow()时Button上鼠标操作效果大家都试过的吧。。   子类中重载那些动作,最后肯定要加上CButton::LB~Down/up()之类的,不然鼠标的焦点以后就不知道在那里了。。   现在的大虾们回答问题也太那个~~~~~~~~~~~~了吧~~~,,凭自己的想~~~~~所以然~~~来答的?   建议大虾能试下可行再回答
      

  8.   

    回复人: lixiaosan(小三) ( ) 信誉:140 的方法按钮应该不会下去了
      

  9.   


    你还是要按钮有按下去的效果是吧,那
    和disabled并不一样如果要按下去不响应不就完了?
      

  10.   

    楼主,小三说的没错
    你所说的情况也可以用BOOL CTest6Dlg::PreTranslateMessage(MSG* pMsg) 来实现。