MFC学习笔记——基础

 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动态库的规则DLL
			2.2.2 MFC扩展DLL
		2.3 不同
			2.3.1 MFC相关的afx头文件
			2.3.2 继承CWinApp类,并且声明了该类的全局变量

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

3.2.1 包含一个继承CWinApp类 3.2.2 CWinFrame 3.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 和delete 1.2 Assert 1.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.增加应用程序类WinApp 2.1 添加CWinApp的子类 2.2 添加InitInstance函数 是在程序启动过程中,会被调用,我盟可以在这个函数中,创建窗口或者各种初始化操作。 3. 窗口 3.1 添加CFrameWnd的子类CMyFrameWnd 3.2 在CWinApp的InitInstance函数定义窗口对象 3.3 创建窗口并显示 3.4 将窗口设置成App的主窗口 m_pMainWnd = pWnd 3.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 = this
		1.2 将this指针保存到ModuleState中。
				m_pCurrentWinApp = this
		1.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 -> WndProc 1.3 创建窗口 CreateWindowEx 1.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 添加消息和处理函数的对应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值