这几天在用MFC做ui的时候遇到一个看起来很简单的问题,但是折腾了好久,最后在同门和老师的帮助下解决了这个问题,对MFC有了更深的理解,特此记录一下。
一、功能简介
实现功能:右边添加车型对话框可以选择车型,不同车型有不同的坡度(车型属性)。单击选择键,实现左边视图窗口车型改变为左边选择的车型,同时将坡度属性也传递到左边的视图类。
说明:
- 左边车辆信息基类为CFormView,右边选择车型窗口基类为CDialogEx类(对话框类和视图类差别还是挺大的,后面会具体说明)
- 跨类之间传输数据:右侧窗口的车型名称和坡度传输到左侧窗口。利用单文档Doc类存放数据,实现多个类共享数据互相调用。
public:
double slope;
CString vehiclename;
二、问题描述
方法1:MFC消息映射机制
消息映射机制:把指定的消息交给指定的函数进行处理的方法,这样就形成了一个<消息,处理函数>对。消息映射可以在本类中实现,也可以跨类实现。
下面是是将消息映射添加到一个类中所做的全部工作:
- 所操作类中,声明消息映射宏。
- 通过放置标识消息的宏来执行消息映射,相应的类将在对BEGIN_MESSAGE_MAP和END_MESSAGE_MAP的调用之间处理消息。
- 对应消息处理函数分别在类中声明,类外定义:
本类和跨类的区别在于跨类需要一个投递消息的函数,如PostMessage()或者SendMessage(),函数投递出去的消息由消息响应函数接收。::PostMessage()函数参数:
BOOL PostMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam