VC下制作一个类似于BCB的GroupBox的控件
2010-07-07 21:42
197 查看
如果大家用过其它一些面向对象的高级语言(如:BCB 、 DELPHI 、 VB 等)可能会用到里面的GroupBox控件或者Panel控件,只要将其它控件拖入这两个控件里面,可以控件一起显示、一起隐藏等功能。VC没有提供Panel控件,但提供了一个GroupBox控件,而且这个控件只是一个简单的边框而已,无法做到里面的控件同时显示,同时隐藏的效果。
一次我在做一个程序时要用到Panel,VC中没有,只好用GroupBox代替,但我发现了上述问题。于是我想到了控件的SetParent()函数,使用这个函数确实可以达到其它控件随GroupBox同时显示或隐藏,但同时也出现了一系列新的问题,最显著的问题就是使用了SetParent()函数后,控件无法执行原来的成员函数。后来我想到一个新的办法:写一个GroupBox的扩展类,用CPtrArray数组管理所有所需的控件。好,不多说,现在开始
新建一个基于对话框的程序。新建一个类,类名为 CGroupBoxEx ,基类为CButton
重载 CGroupBoxEx 类的 Create 函数
在 CGroupBoxEx 类中添加私有变量或者保护变量 m_ChildList ,类型为 CPtrArray ,用于管理子控件
添加公有函数
重载 CGroupBoxEx 类的 ShowWindow 函数
到此已经完成了,当然还要在 CGroupBoxEx 类中的析构函数中释放数组
现在 CGroupBoxEx 已经完成了,在对话框中随便添加几个控件,和两个按钮控件,并在对话框类中添加变量 CGroupBoxEx *pGroup;
在对话框初始化函数中添加以下代码
然后在其它两个按钮控件中分别加上
1.pCroup->ShowWindow(SW_SHOW); // 显示
2.pCroup->ShowWindow(SW_HIDE); // 隐藏
运行看看,怎么样?
大家还可以再扩展一下类,添加自己所需要的代码。
以上代码在 Windows XP Professional SP3 + Visual C++ 6.0 下编译通过源码我就不打包上传了
一次我在做一个程序时要用到Panel,VC中没有,只好用GroupBox代替,但我发现了上述问题。于是我想到了控件的SetParent()函数,使用这个函数确实可以达到其它控件随GroupBox同时显示或隐藏,但同时也出现了一系列新的问题,最显著的问题就是使用了SetParent()函数后,控件无法执行原来的成员函数。后来我想到一个新的办法:写一个GroupBox的扩展类,用CPtrArray数组管理所有所需的控件。好,不多说,现在开始
新建一个基于对话框的程序。新建一个类,类名为 CGroupBoxEx ,基类为CButton
重载 CGroupBoxEx 类的 Create 函数
BOOL Create(LPCTSTR lpCaption, RECT &rect,CWnd *pParentWnd,UINT nID=0);,函数代码如下:
BOOL CGroupBoxEx::Create( LPCTSTR lpCaption, // 标题 RECT &rect, // 矩形位置 CWnd *pParentWnd, // 父窗口 UINT nID // 控件ID(因为以后用指针操作控件,所以这个参数可以不要,下面的uID改为0) ) { return CButton::Create(lpCaption,WS_CHILD|WS_VISIBLE|BS_GROUPBOX,rect,pParentWnd,nID); }重载 Create 函数只是为了以后方便创建控件,可以改其中的参数
在 CGroupBoxEx 类中添加私有变量或者保护变量 m_ChildList ,类型为 CPtrArray ,用于管理子控件
添加公有函数
void AddChild(void *pChild);用于添加子控件的指针到 m_ChildList 中
void CGroupBoxEx::AddChild(void *pChild) { m_ChildList.Add(pChild); }
重载 CGroupBoxEx 类的 ShowWindow 函数
int ShowWindow(int nCmdShow);
int CGroupBoxEx::ShowWindow(int nCmdShow) { // 遍历数组 for(int i=0;i<m_ChildList.GetSize();i++) ((CWnd*)m_ChildList.GetAt(i))->ShowWindow(nCmdShow); return CButton::ShowWindow(nCmdShow); }
到此已经完成了,当然还要在 CGroupBoxEx 类中的析构函数中释放数组
m_ChildList.RemoveAll();
现在 CGroupBoxEx 已经完成了,在对话框中随便添加几个控件,和两个按钮控件,并在对话框类中添加变量 CGroupBoxEx *pGroup;
在对话框初始化函数中添加以下代码
pGroup=new CGroupBoxEx; CRect rect; this->GetClientRect(&rect); rect.bottom=rect.bottom/2; pGroup->Create(_T("Hello World"),rect,this); // 创建控件 pGroup->AddChild(GetDlgItem(IDC_BUTTON1)); // 添加子控件到 pGroup 中 ......
然后在其它两个按钮控件中分别加上
1.pCroup->ShowWindow(SW_SHOW); // 显示
2.pCroup->ShowWindow(SW_HIDE); // 隐藏
运行看看,怎么样?
大家还可以再扩展一下类,添加自己所需要的代码。
以上代码在 Windows XP Professional SP3 + Visual C++ 6.0 下编译通过源码我就不打包上传了
相关文章推荐
- VC下制作一个类似于BCB的GroupBox的控件
- 类似于Flash制作的一个图片展示效果
- mfc static,checkbox,groupbox,redio 控件透明
- VC下自制一个MusicPlayer:调用activemovie控件
- 结合ImageSwithcer和Gallery控件制作一个图片浏览(附源代码)
- 如何利用Microsoft Web Browser控件在VC中创建一个属于自己的浏览器
- 如何在VC6或者VC7下用 ATL做一个OpenGL的(COM)控件?
- VC控件的group属性
- MFC中修改GroupBox控件的背景色
- BCB中的TGroupBox---能用它就用吧
- 在vc MFC下制作具有XP风格按钮等控件
- VC++ combo box控件的使用(转)
- [Winform控件编程系列之一]制作一个能验证错误的文本框和ErrorProvider的复合控件
- winform groupbox控件放到窗体中间位置
- BCB控件制作和消息处理
- 三分钟免费搞定网站在线客服,利用PowerTalkBox控件制作而成,为大家提供比较好的示例
- 使用c#制作的一个树形下拉控件
- 带优美外观的UserControl控件GroupBox
- VC中制作一个静态链接库
- 制作一个CheckListBox控件