当前位置:C++技术网 > 资讯 > MFC手动添加命令响应

MFC手动添加命令响应

更新时间:2015-06-24 18:11:25浏览次数:1+次

    MFC手动添加命令响应的三个步骤

    1.在要添加响应的类(如(CCjjjsDlg,)中的头文件中的protected部分加入:afx_msg void OnTest();

    说明:afx_是MFC框架定义的前缀,后面的msg表示消息响应函数,和普通的函数不一样。后面紧接着是普通的函数声明。不过一般消息响应函数使用On开头,与MFC自动生成的保持一致,好让自己一眼看出是什么函数。至于是否把消息声明为protected权限,如果只是简单的使用这个类,其实没太大要求,只不过,自动生成的是protected,我们就与它保持一致,可以根据自己的喜好配置成其他权限。这只是限定继承的,如果这个类要被继承,就看你的类要被继承是否想消息响应函数给子类继承等等。
    要详细理解C++继承,请阅读《C++继承:继承模型与内存模型的关系分析》。

    2.在类的实现文件.cpp文件中的BEGIN_MESSAGE_MAP(CCjjjsDlg, CDialog)和END_MESSAGE_MAP()之间加入消息映射,将菜单的ID号和响应函数映射关联起来。
    ON_COMMAND(ID_TEST,OnTest),不需要分号. 

    说明:MESSAGE_MAP为MFC的消息映射宏,前面加BEGIN表示映射开始,前面加END表示映射结束。括号中的CCjjjsDlg, CDialog,CCjjjsDlg为你的当前类,CDialog为你的类的基类,这个是对话框类。如果有些消息你不响应,则MFC会使用基类CDialog来响应。如果你的基类是其他的,则有你定义的其他的类来响应你的类不响应的消息。
    ON_COMMAND则为命令映射条目,括号中的ID_TEST为你的窗口使用的控件的ID,可以使用宏ID_TEST,或者实际的ID号等,括号中第二个参数即对这个ID对应的控件的响应函数,这个函数就是在类头文件中声明的afx_msg void OnTest();函数。下一步就是实现这个函数。

    3.在类的实现文件中写OnTest()函数的定义即可。

    说明:函数的定义和普通的函数定义一样,这里就不多说了。不过,定义在.cpp文件是比较推荐的做法,但是如果函数很小,也可以使用在头文件中直接定义,默认使用内联形式生成。在.cpp文件中,函数前面要带上你的类的作用域解析操作符,如void CCjjjsDlg::OnTest()

    这是手动实现的控件响应的基本操作。控件的消息响应,可以使用向导直接生成,不过有时候,需要动态的创建控件,并进行事件响应,就需要这样做了,自动向导则没有办法了。了解这个过程后,可以对自动生成的进行修改。

    具体的动态创建按钮并动态响应按钮事件的案例分析指导,请阅读《动态创建控件并响应事件代码实现过程