按钮不能隐藏

younerest 2009-03-08 07:11:24
自定义了一个按钮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);
}
...全文
143 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
younerest 2009-03-09
  • 打赏
  • 举报
回复
我看了一下,可能问题出在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是透明的,所以,我们也可以看见按钮.不知道我想的对不对?请有兴趣的朋友一起来讨论下
younerest 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 smallfishff 的回复:]
m_Btn.Loadicon(); //怎么处理的?
将WS_VISIBLE风格去掉看看会不会显示.
[/Quote]
m_Btn.Loadicon(); 是用来载入一个icon图标,使按扭上能显示这个icon图标.
WS_VISIBLE去掉了,但结果还是一样
younerest 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fishion 的回复:]
你在Hide() 里设一个断点看看能不能进去了
[/Quote]
断点设了,能运行进去,但还是不能隐藏
  • 打赏
  • 举报
回复
学习中
smallfishff 2009-03-09
  • 打赏
  • 举报
回复
m_Btn.Loadicon(); //怎么处理的?
将WS_VISIBLE风格去掉看看会不会显示.
wnx_u 2009-03-09
  • 打赏
  • 举报
回复
你的Btn2类必须重写OnSize()函数,并且Invalidate()必须放在OnSize()函数里面才行。不然没得返应,但是如果你在这个时候点一下别的控件,有可以隐藏了,你试试我说得对不?致于原因,我也是个初学者,不知道;但事实是这样.
smallfishff 2009-03-09
  • 打赏
  • 举报
回复
CWnd::Invalidate();
CWnd::UpdateWindow();
刷新Menu再看下.
fishion 2009-03-08
  • 打赏
  • 举报
回复
你在Hide() 里设一个断点看看能不能进去了

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧