我需要控制一个开关必要时禁用,但是禁用以后很难看,我希望禁用时保留正常时的状态,网上找了代码说  CMainFrame::CMainFrame()   
  {   
  this->m_bAutoMenuEnable=FALSE;   
  }   
但是我的是基本dlg类,没有CMainFrame,也没有m_bAutoMenuEnable
还有说不影射消息响应函数就行,具体怎么做呢?

解决方案 »

  1.   

    禁用以后的状态比较明显啊,显不好看的话,可以在WM_PAINT中处理,爱搞成什么样子都行
      

  2.   

    可以自己定义一个成员变量保存按钮的状态。
    class CXXXDlg
    {
    private:
       BOOL m_bIsDisable;
    .....
    }然后在对应的响应函数中使用:void XXX::OnButtonClick()
    {
        if(m_bIsDisable)//如果按钮被禁用
            return;  //返回,不执行任何操作
        ///在下面添加按钮未被禁用时的处理 
        .....
    }
      

  3.   

    仅对按钮来说,实现上很简单:看你的那小段程序估计你是用MFC的,那么就从CButton类派生一个子类,给子类增加对WM_LBUTTONDOWN消息的处理。在你的处理函数里测试一个标志变量。希望允许按钮被点击时,将调用直接传给父类的OnLButtonDown,此时由于父类的OnLButtonDown默认的调Default从而实现的按钮的点击行为。不希望允许按钮被点击时,只需什么也不错即可。
      

  4.   

    如果是工具栏,做一个正常时的图象,作一个灰时的图象,CToolBarCtrl::SetImageList ,CToolBarCtrl::SetDisabledImageList来设置,包两个图象绘来一样不就是你要的结果。
      

  5.   

    回复:xdljf(hunter) 
      禁用以后不好看,在WM_PAINT中处理,可能比较复杂,我还不会。 
    回复:luohongming(lhm)  
    自己定义一个成员变量保存按钮的状态。 是可以的,但是我是想找一个更好的办法,不然要一个一个添加过去了,
    回复:AgedBOY(禁欲的情种) 
    你说的方法,我去试试看。马上回来  
      

  6.   

    真不好意思,回来这么晚,我把实现方法总结了一下,写了个原创。有需要借鉴的网友欢迎来访问。
    http://www.dayjs.com/html/C/kjcz/20070808/11156.html
    谢谢luohongming(lhm)和AgedBOY(禁欲的情种) 的思路,结贴。