动态创建控件支持事件响应并可保存与读取
2010-08-22 20:47:30 来源:WEB开发网VC++6.0中创建动态控件是比较偏离基础的知识,也有一定的难度。它的完整功能是要动态创建控件后再动态响应控件中的事件,两者全部做到才算完整。
这里我将展示一个完整的动态控件示例,它可以动态创建控件,然后再动态响应控件事件,并可以保存控件信息至ini配置文件,然后再根据ini文件读取出控件信息来动态创建控件。相信它能够解决你在动态控件中所遇到的许多问题。
当然,动态控件的方法有许多种,我展示的只是给我认为较好的。
这里以VC++6.0创建对话框工程为例,添加菜单,分别添加子项按钮,文本框,标签。大家知道,VC中基本上都要靠手写,所以,这里先写三个控件的创建,其它的控件基本一致。
第一步当然是建立一个全局的类(噢 这个只是我个人喜好) 里面放上满满的全局共用数据,我会把它们都放入一个*Global.h文件中。还有一个控件类,里面包含了每个控件都需要的属性,比如控件的名称、大小、坐标以及附加。
除了那两个类,最重要的还是控件类,因为使用系统的控件类添加事件的响应会比较麻烦(实现不会太难,主要是不好管理)。具体添加方法我想大家都明白,就是使用系统的添加类向导生成三个类(我们现在只做三个不同类型的控件) 一个继承自按钮类(CButton)-按钮一个继承自编辑框类(CEdit)-文本框,一个继承自静态类(CStatic)-标签,分别命名为CMyButton,CMyEdit,CMyLabel,不会介意吧?。如果使用手动添加的话,则强大的事件类向导将不能使用。
这下应该有二个系统类,三个控件类了吧?当然控件类也会在工程中加入它们的头文件与程序文件。下面就是设计控件类了。我有考虑使用多继承来使这三类自定义控件类都继承控件类(第一步中加入的控件类暂时称为控件主类为好) 不过没使用 因该更方便.现在只是在控件主类中声明了那三个自定义控件 然后加上一开始的一些共公信息 就是下面这样的了:////////////////
//控件主类
////////////////
class _myControl
{
public:
//共公信息
CString caption;//标题
CRect rect;//坐标大小
int type;//类型
//动态控件
CMyButton myButton;
CMyEdit myEdit;
CMyLabel myLabel;
_myControl()
{
caption="Control";
type=0;//默认为按钮
rect=CRect(10, 80, 100, 120);//初始坐标大小
}
};
更多精彩
赞助商链接