复习
C++
- 三大特性: 封装 , 继承 , 多态
- 类构造函数:
- 调用顺序 : 先父类后子类, 可以在初始化列表中调用父类构造.
- 析构顺序 : 先子类后父类
- 转换构造 : 有且仅有一个非本类类型的参数
- 默认构造: 没有参数
- 拷贝构造: 有且仅有一个本类类型的引用的参数
怎么在main函数之前执行代码,比如打印一个hello world.
int fun(){printf("hello\n");return 1;}
int g_nNum = fun();
int main()
{
}
class MyClass{
public:
MyClsas(){
printf("hello");
}
};
MyClass g_obj;
int main()
{
}
SDK
- 窗口创建流程
- 设计窗口类
- 绑定类名
- 绑定窗口回调函数
- 注册窗口类
- 创建窗口
- 提供一个已注册的窗口类名
- 更新/显示窗口
- 消息泵
- GetMessage获取消息
- DispatchMessage将消息分发给窗口
- 设计窗口类
- 消息的处理过程
- WM_XXXX : 窗口消息, 处理窗口创建,窗口关闭等消息(WM_KEYDOWN,WM_LBUTTONDOWN)
- WM_COMMAND : 基本控件的控件消息
- 处理按钮点击等消息
- WM_NOTIFY : 通用控件的通知消息
- 处理列表控件,树控件的按键,鼠标等消息
- 控制使用的过程
- 创建控件 : 都是通过CreateWidnowEx来创建,通过不同的窗口类名来创建不同的空间. 例如,创建按钮, 就是CreateWindowEx(0,L”Button”, ….);
- 操作控件 : 都是通过SendMessage来操作
- 例如, 将一个单选框设置为选中状态:
SendMessage(hButton,BM_SETCHECK,1,0);
- 例如, 将一个单选框设置为选中状态:
- 响应控件的消息
- 一般都在WM_COMMAND消息中, wParam的低16位保存触发了消息的控件的ID.
- 窗口创建流程
MFC
MFC程序:
- 继承CWinApp得到一个自定义的子类
- 使用CWinApp的子类定义一个全局变量
- 在CWinApp的子类中重写虚函数:
BOOL InitInstance()
- 虚函数就是MFC的程序入口
MFC的窗口
- 使用CDialogEx来操作对话框
添加变量
- 给控件绑定一个变量
- 控件类型的绑定 : 将控件绑定到一个MFC的窗口类
- 值类型的绑定: 将控件绑定到一个非窗口类中,例如可以绑定到CString,也可以绑定到int类型.
- 绑定的流程:
- 在类内声明一个成员变量
- 如果是控件类型绑定, 就使用MFC窗口类作为变量的类型
- 如果是值类型绑定, 就使用其它类型作为变量的类型
- 需要通过
UpdateData
来交换控件和变量的数据
- 需要通过
- 在虚函数DoDataExchange中添加代码, 将控件ID和变量名绑定在一起.
- 控件绑定的使用, 使用:
DDX_Control(pDX, 控件ID, 成员变量名);
- 值绑定(有很多函数,需要根据控件的类型来选择), 使用:
DDX_xxx(pDx,控件ID, 成员变量名)
一般, 编辑框使用的:DDX_Text
,复选框,使用是DDX_Check
至于使用哪一种都不需要记忆, MFC的类向导功能会自动选择.
- 控件绑定的使用, 使用:
- 在类内声明一个成员变量
添加对话框类
- 先添加对话框资源
- 再添加一个MFC类
- 需要继承CDialogEx类
- 声明并定义消息映射表
- 重写DoDataExchange虚函数
- 需要在构造函数中调用父类构造, 并将对话框的资源ID传递给父类构造
响应消息和类向导
- 窗口消息
- 对话框初始化消息
- WM_SIZE, WM_LBUTTONDOWN
- 需要用到类向导
- 控件消息
- 按钮点击 : 直接在对话框视图上双击.
- 其它控件的消息的响应需要用到类向导
项目
mfc_001.zip