当前位置:C++技术网 > 资讯 > 动态创建控件并响应事件代码实现过程

动态创建控件并响应事件代码实现过程

更新时间:2015-06-07 20:00:05浏览次数:1+次

    MFC动态创建控件以及响应动态创建的控件的事件的实现方法如下。

1.创建对象
    用new进行动态创建一个对象。然后调用Create函数创建窗口,在函数的父窗口参数中传入this或者用AfxGetMainWnd()获取的父窗口对象指针。最后一个窗口ID先自定义一个ID名。

2.定义ID宏
    在cpp文件中,定一个创建对象时自定义的ID的宏,给予一个数字,不要和系统资源的ID值重复。如#define ID_DY_OK 10000

3.消息映射
    在VS2010中的cpp文件中的BEGIN_MESSAGE_MAP之间写上映射语句。可以参照静态生成的消息映射写。括号内第一个写上自定义的ID名,后面写上响应的函数地址,以&取地址,&后面紧跟函数名,函数名需要写清楚所属类。因此,一个类中的消息可以在另外一个类中进行处理,只要消息映射写上要处理消息的类名以及函数名,并在处理消息的类中进行消息处理函数的声明。
    而在VC6.0中,在//{{AFX_MSG_MAP()中间是类向导自动生成的,里面的消息处理都是静态的控件的消息处理。如果要进行动态控件的消息处理,则要将消息映射写在END_MESSAGE_MAP()之间的//}}AFX_MSG_MAP之后的中间区域。消息映射的括号内的第二个参数只写函数名即可。当然,此时的函数是本类中的,这是默认的情况。不需要写&取址符,函数名就表示函数地址。如果要用其他类中的函数进行处理,则只需要加上类名作用域解析操作符和响应的函数名即可。

4.消息声明
    在头文件中,声明消息处理函数。函数的声明和普通的函数声明一样,此外,还要在声明前面加上afx_msg作为消息响应函数的声明标志。

5.消息处理
    在cpp文件中,和普通函数一样处理函数定义,函数可以有参数也可以没有参数,如果有参数,参考静态控件消息处理函数的参数样式写和处理。


    当然,有一个比较快速的方法就是,动态创建好控件后,然后用向导创建静态的控件的消息处理,然后将动态创建的控件ID值和静态的设置成一样的,然后删掉静态控件。如果是VC6.0则要将消息映射拿到//{{AFX_MSG_MAP()之外END_MESSAGE_MAP()之前即可。但是建议用上面的手动添加,灵活且能够深刻理解消息处理机制。MFC动态创建控件以及响应动态创建的控件的事件的实现方法和原理。MFC动态创建控件以及响应动态创建的控件的事件的实现方法和原理。MFC动态创建控件以及响应动态创建的控件的事件的实现方法和原理。MFC动态创建控件以及响应动态创建的控件的事件的实现方法和原理。MFC动态创建控件以及响应动态创建的控件的事件的实现方法和原理。MFC动态创建控件以及响应动态创建的控件的事件的实现方法和原理。