MFC学习笔记——基础

来源:互联网 发布:工作证明制作软件 编辑:程序博客网 时间:2024/06/08 00:01
 MFC应用程序1. MFC 的控制台程序1.1 包含afx系列的头文件1.2 CWinApp theApp- MFC的应用程序类,封装了应用程序的启动过程。1.3 AfxWinInit- MFC初始化函数,将应用程序的信息初始化。2. MFC 的动态库和静态库2.1 静态库—— 增加了MFC的支持2.2 动态库2.2.1 MFC规则DLL使用MFC静态库的规则DLL使用MFC动态库的规则DLL2.2.2 MFC扩展DLL2.3 不同2.3.1 MFC相关的afx头文件2.3.2 继承CWinApp类,并且声明了该类的全局变量

3. MFC 应用程序3.1 单文档视图应用程序3.1.1 包含一个继承CWinApp类3.1.2 CWinFrame3.1.3 CView 的子类3.1.4 CDocument  的子类3.2 多文档视图应用程序

3.2.1 包含一个继承CWinApp类3.2.2 CWinFrame3.2.3 CView 的子类3.2.4 CDocument  的子类3.2.5 CChildFrame 子框架窗口3.3 对话框应用程序3.3.1 包含一个继承CWinApp类3.3.2 对话框类四  MFC中的类1. CObject类MFC类的基础,大部分MFC类都是它的子类。CObject封装了MFC的基础机制1.1 new 和delete1.2 Assert1.3 运行时信息1.4 动态创建1.5 序列化2. 应用程序框架应用程序启动相关信息,以及MFC消息映射机制3. 窗口支持类封装了窗口操作的API,各种控件及窗口的框架。4. 绘图类提供了绘图API的封装,以及相关的GDI设备封装5 . MFC 的集合类提供了数组、链表、映射的数据结构操作6. 数据库支持类 ODBC 支持类和DAO的支持类。 DAO的类已作废。7.同步类临界区/事件/互斥/信号量的封装8.Socket类  封装了socket的编程9. 常用数据结构CString CRect CSize五 第一个MFC程序 1.环境设置1.1修改头文件1.2增加MFC库的支持2.增加应用程序类WinApp2.1 添加CWinApp的子类2.2 添加InitInstance函数是在程序启动过程中,会被调用,我盟可以在这个函数中,创建窗口或者各种初始化操作。3. 窗口3.1 添加CFrameWnd的子类CMyFrameWnd3.2 在CWinApp的InitInstance函数定义窗口对象3.3 创建窗口并显示3.4 将窗口设置成App的主窗口 m_pMainWnd = pWnd3.5 在CMyFrameWnd中添加窗口处理函数WindowProc,在WindowProc中处理消息


#include "stdafx.h"#include "WinMFC.h"#include <afx.h>#include <afxwin.h>class CMyFrameWnd : public CFrameWnd{public:virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam) ;};LRESULT CMyFrameWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam){switch(message){case WM_CREATE:AfxMessageBox(_T("WM_CREATE")) ;case WM_PAINT:{PAINTSTRUCT ps = {0} ;HDC dc = ::BeginPaint(m_hWnd, &ps) ;TCHAR *szText = _T("aaaaaaa") ;TextOut(dc,100,100, szText, wcslen(szText)) ;::EndPaint(m_hWnd, &ps) ;}break;}return CFrameWnd::WindowProc(message, wParam, lParam) ;}class CMyApp : public CWinApp{public:virtual BOOL InitInstance() ;};CMyApp theApp ;BOOL CMyApp::InitInstance(){CMyFrameWnd *pWnd  = new CMyFrameWnd() ;pWnd->Create(NULL, _T("MyApp")) ;

MFC应用程序的启动MFC程序与Win32程序一样,都需要程序的入口函数。1. CWinApp应用程序类,封装了应用程序的相关信息,可以提供初始化,消息循环等处理。CWinApp的构造1.1 将this指针保存的ThreadState中。m_pCruuentWinThread = this1.2 将this指针保存到ModuleState中。m_pCurrentWinApp = this1.3 各种的成员变量的初始化2. 程序的入口函数2.1 WinMain函数,与Win32程序一致2.2 在WinMain函数中调用了AfxWinMain函数2.3 AfxWinMain函数2.3.1 调用AfxWinInit初始化应用程序2.3.2 调用App的InitApplication初始化MFC内部数据2.3.3 嗲用CWinThread的InitInstance函数做初始化操作2.3.4调用CWinThread的Run函数进行消息循环2.3.5 调用AfxWinTerm函数做退出处理3.程序的启动3.1 CWinApp在构造过程中,将自己的this指针分别保存到全局的变量中,将自己的this指针分别保存在全局变量中。3.2 在AfxWinMain执行中,首先从全局变量中将保存CWinapp的地址获取到。3.3 调用CWinApp的InitInstance函数进行初始化。我们在InitInsance函数中,创建窗口等初始化操作。3.4 调用Run函数,进行消息循环。

窗口创建及窗口处理函数

1. 窗口创建1.1 窗口的参数初始化,包括窗口类,风格等到。将DefWindowProc注册成窗口处理函数。1.2 设置了创建HOOK。当窗口创建的时候,调用这个HOOK函数。Wnd-> HOOK -> WndProc1.3 创建窗口CreateWindowEx1.5卸载创建HOOK将HOOK从程序中移除。2. HOOK钩子2.1 使用AfxGetAfxWndProc获取了一个WNDPROC.2.2 将这个WNDPROC函数设置成当前窗口的处理函数。一个WNDPROC函数指针,也就是AfxWndProc函数地址。2.3 将窗口句柄和窗口类的指针保存到MFC的映射数据中3. AfxWndProc窗口处理函数3.1 根据窗口的句柄获取了相对应窗口的CWind*类型指针。从映射数据中根据窗口句柄查找Cwnd*指针。3.2 调用AfxCallProc函数。3.3 在AfxCllWndProc函数中调用CWind的WindowProc函数。4.窗口的创建及处理过程4.1 将DefWindowProc函数注册为当前窗口的处理函数。4.2 定义钩子函数4.3 创建窗口4.4 将窗口类指针和窗口句柄的对应关系保存4.5 在钩子函数中将AfxWndProc函数设置当前窗口的窗口处理函数4.6 在AfxWndProc(Base)收到窗口消息,从窗口对应关系中

4.7 调用窗口类WindowProc函数处理消息

消息映射

1. 消息映射的添加

1.1 在FrameWnd添加宏定义

1.2 添加消息宏实现

1.3 添加消息处理函数

1.4 添加消息和处理函数的对应

原创粉丝点击