MFC如何为窗体添加消息响应函数,以及覆写窗体类的虚函数

⌚Time: 2022-10-09 21:00:11

👨‍💻Author: Jack Ge

添加自定义窗体类

对于新建的窗体

要实现它的消息响应函数以及虚函数覆写,需自定义类,我有两种方式

方式一

在资源视图中直接右键窗体,添加类

直接在资源视图中运行的类向导添加自定义类

这种方式自定义类,好处是将自定义类与资源窗体建立了关联,在新建窗体的属性中可以直接添加消息响应函数,系统会自动建立相关函数与消息映射

方式二

点击项目,添加类

添加名字

而对于直接在项目中使用类向导添加的自定义类,看资源视图,对于新建窗体的消息属性中是没有任何消息的,不能直接添加消息响应函数

对于使用项目中的类向导建立的自定义类,如果要与资源视图中窗体的属性建立关联,办法是在类声明中定义包含窗体资源ID的匿名枚举

enum { IDD = IDD_DIALOG1 };

并且重新打开项目,就可以在窗体的属性中看到相关的消息了,直接通过属性界面添加消息响应函数

窗体类添加消息响应函数

方式一

直接在资源视图的窗体属性中,找到消息,点击就可以添加消息响应函数

方式二

在类视图中找到窗体类,右键属性,找到消息,点击添加消息响应函数

方式三

手动写代码实现消息响应函数,对于以VM_CLOSE消息的处理为例子,它的消息响应函数是OnClose() 1.在类头文件中定义消息响应函数的声明,函数名字、参数以及返回值不能有错误

afx_msg void OnClose();

2.实现响应函数

void CMyDialog::OnClose()
{
    //添加处理代码
    CDialog::OnClose();
}

3.建立消息映射,对于VM_CLOSE的消息映射是一个名为ON_WM_CLOSE()的宏定义

BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
    ON_WM_CLOSE()
    ...
END_MESSAGE_MAP()

覆写窗体类的虚函数

方式一

在类视图中,对于自定义类右键属性,可以看到它的虚函数,点击实现对虚函数的覆写

方式二

手动实现虚函数的覆写,已OnInitDialog函数为例子

在窗体类中声明该函数

virtual BOOL OnInitDialog();

在cpp文件中实现该函数


BOOL CMyDialog::OnInitDialog()
{
    CDialog::OnInitDialog();

    // TODO:  在此添加额外的初始化

    return TRUE;  // return TRUE unless you set the focus to a control
    // 异常: OCX 属性页应返回 FALSE
}