基本概念
MFC Microsoft Fundation class 微软基础类库
框架 基于Win32 SDK进行的封装
属性:缓解库关闭
属性->C/C++/代码生成/运行库/MTD
属性->常规->MFC的使用:在静态库中使用MFC,默认是使用的共享DLL,运行时库
SDK版本:开发软件的套件
WSK:开发驱动的套件
MFC基于类的管理
预编译头:
Demo01.h
Demo01.cpp
Demo01Dlg.cpp
-  Demo01Dlg.h 绑定在对话框上的类 类的继承关系: Cobject:处理序列化以及反序列化 CCmdTarget:处理WM_COMMAND消息 CWnd:窗口类 CDialog:对话框 CDialogEx:对话框 Demo01Dlg:自己创建的对话框 
-  OnInitDialog:对话框MFC框架的入口 
-  MFC里和窗口句柄有关的函数,均不需要填写窗口句柄函数 
-  如果需要,添加作用域强行退出MFC的命名空间 
-  模态对话框 
-  非模态对话框 
MFC中依然支持SDK的做法
类绑定:
- 添加类
- 类名
MFC绑定变量:
值类型
控件类型
复习总结:
-  创建MFC项目的时候,项目名称中不能出现中文。 
-  如果想要兼容让其他没有安装visual studio的计算机使用,那么就要使用在静态链接库中使用MFC 
-  MFC是基于类的 
-  Practice.h: 该文件为我们创建了CPracticeApp类 类的继承关系: (上面还有很多) CWinThread:应用程序线程,继承CCmdTarget CWWinApp:对话框,继承CWinThread CPraticeApp:是我们自己的应用程序类,继承CWinApp 
-  PracticeDlg.h: 这个头文件中是我们自己创建的对话框类 类继承关系: CObject:基础类库中的主体基类,处理序列化与反序列化 CCmdTarget:消息映射结构体系类,继承Cobject CWnd:窗口类,继承CCmdTarget CDialog:对话框类,继承CWnd CDialogEx:对话框类,继承CDialog CPraticeDlg:我们自己的对话框类,继承CDialogEx 
相关操作:
-  按钮操作:在对话框上双击按钮即可编辑相关操作 
-  添加对话框:比如说要在某个按钮上添加对话框,首先需要画出对话框,然后双击添加MFC类,在要显示的时候,先用这个类声明一个变量,然后使用DoModal方法,也可以先new出该对话框的类,然后使用Create方法,创建出对话框,但是这种方法需要ShowWindow方法, 实例: 第一种: CDialogOne obj;obj.DoModal();第二种: CDialogTwo *obj = NULL;obj = new CDialogTwo;obj->Create(IDD_DIALOG2, this);obj->ShowWindow(SW_SHOW);
-  可以在按钮上添加变量,比如说在一个按钮上添加了一个文本框变量,将其添加为值的形式,字符串类型,那么我们在处理按钮的时候,可以直接: 其中UpDateData方法的作用是同步 UpdateData(TRUE);m_EDIT = L"欢迎来到MFC的世界!";UpdateData(FALSE);
-  在MFC中,有很多消息是自己处理了,我们并不用关心,但是如果我们要自己处理消息 -  处理SendMessage消息: 在对话框中使用类向导,添加OnWndMsg方法,在OnOwnMsg方法中,我们可以像SDK那样处理消息。 BOOL CPracitceDlg::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult) {// TODO: 在此添加专用代码和/或调用基类switch (message) {case WM_KEYDOWN: {switch (wParam) {case VK_F4: {MessageBox(L"F!", L"MSG", NULL);break;}}break;}case WM_LBUTTONDOWN: {MessageBox(L"WM_LBUTTONDOWN", L"MSG", NULL);break;}case 199: {MessageBox(L"SEND199", L"MSG", NULL);break;}case 200: {break;MessageBox(L"SEND200", L"MSG", NULL);}case 201: {MessageBox(L"SEND201", L"MSG", NULL);break;}case 202: {MessageBox(L"SEND202", L"MSG", NULL);break;}}return CDialogEx::OnWndMsg(message, wParam, lParam, pResult); }
-  处理PostMessage消息: 在对话框中使用类向导,添加PreTranslateMessage方法,在PreTranslateMessage方法中,我们可以像SDK那样处理消息。 BOOL CPracitceDlg::PreTranslateMessage(MSG* pMsg) {// TODO: 在此添加专用代码和/或调用基类switch (pMsg->wParam) {case 199: {MessageBox(L"POST199", L"MSG", NULL);break;}case 200: {break;MessageBox(L"POST200", L"MSG", NULL);}case 201: {MessageBox(L"POST201", L"MSG", NULL);break;}case 202: {MessageBox(L"POST202", L"MSG", NULL);break;}}return CDialogEx::PreTranslateMessage(pMsg); }
 
-  
-  SendMessage会等待消息响应,会阻塞,所以会按照顺序来,但是PostMessage不会等待消息返回,所以导致顺序倒置: void CPracitceDlg::OnBnClickedButton1() {//CDialogOne obj;//obj.DoModal();///*//HWND hEdit1Dlg = ::GetDlgItem(m_hWnd, IDC_EDIT1);//::SetWindowText(hEdit1Dlg, L"欢迎来到MFC的世界!");*///UpdateData(TRUE);//m_EDIT = L"欢迎来到MFC的世界!";//UpdateData(FALSE);//SendMessage(199, NULL, NULL);//SendMessage(200, NULL, NULL);//SendMessage(201, NULL, NULL);//SendMessage(202, NULL, NULL);PostMessage(199, NULL, NULL);PostMessage(200, NULL, NULL);PostMessage(201, NULL, NULL);PostMessage(202, NULL, NULL); }