自定义了一个按钮m_Btn,想通过调用Hide()函数,使m_Btn隐藏起来,但运行后就是隐藏不了,哪位高手能不能帮我看下是为什么,下面是部分代码class Menu : public CWnd{
public:
Btn2 m_Btn;;//Btn2是从CButton派生出来的类
}BOOL Menu::CreateGroupMenu(CWnd *pParent, CRect rcClient, UINT nID) {
if (!RegisterWindowClass())//RegisterWindowClass()为注册窗口的函数
  return FALSE;
   if (!CWnd::Create(MENU_CLASSNAME, NULL, WS_CHILD|WS_VISIBLE, rcClient, pParent, nID))
    return FALSE; 
rect2.left=0;
rect2.top=30;
rect2.right=150;
rect2.bottom=60;
m_Btn.Create("子窗口",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, rect2, this, IDC_BTNID);
m_Btn.Loadicon();
return TRUE;
}
void Menu::Hide()
{
m_Btn.ShowWindow(SW_HIDE);
this->Invalidate(TRUE);
}

解决方案 »

  1.   

    你在Hide() 里设一个断点看看能不能进去了
      

  2.   

    m_Btn.Loadicon(); //怎么处理的?
    将WS_VISIBLE风格去掉看看会不会显示.
      

  3.   

    m_Btn.Loadicon(); 是用来载入一个icon图标,使按扭上能显示这个icon图标.
    WS_VISIBLE去掉了,但结果还是一样
      

  4.   

    我看了一下,可能问题出在class Menu这个类上面,因为Menu是从CWnd继承过来的,当程序运行到Hide这个函数的时候,按钮虽然显示着,但用鼠标点击它,并没有反应;重新写一个函数Show,让程序运行到Show,按钮同样是显示的,不过,这时候如果用鼠标左键点击,这时候,按钮就有了凹下去的反应.下面是Show代码
    void Menu::Show()
    {
    m_Btn.ShowWindow(SW_SHOW);
            this->Invalidate(TRUE); 
    }
    我想,是不是调用Hide()的时候,按钮已经实现了隐藏的功能,不过按钮的父窗体是一个基于CWnd的Menu,Menu想对与我们来说是一个透明的,按钮虽然隐藏于Menu后面,但Menu是透明的,所以,我们也可以看见按钮.不知道我想的对不对?请有兴趣的朋友一起来讨论下
      

  5.   

    CWnd::Invalidate();
    CWnd::UpdateWindow();
    刷新Menu再看下.
      

  6.   

    你的Btn2类必须重写OnSize()函数,并且Invalidate()必须放在OnSize()函数里面才行。不然没得返应,但是如果你在这个时候点一下别的控件,有可以隐藏了,你试试我说得对不?致于原因,我也是个初学者,不知道;但事实是这样.