大家好,欢迎来到IT知识分享网。
一、什么是MFC
MFC(全称:Microsoft Foundation Classes),微软基础类库。他封装了Windows应用程序的各种API以及相关机制的c++类库。
1、特点:
(1)开发效率高
(2)程序执行效率高,相对C#
(3)迁移性差(仅支持Windows)相对QT
二、MFC程序介绍
1、MFC类库常用头文件
(1)afx.h 将其他MFC头文件包含在内
(2)afxwin.h 包含了各种MFC窗口类,包含了afx.h和windows.h
(3)afxext.h 包含了扩展窗口类的支持,如:工具栏和状态栏
2、MFC程序的分类
(1)MFC控制台程序:可以调用MFC的控制台程序
(2)MFC库程序
MFC静态库
MFC动态库
MFC扩展库:扩展库只能被MFC应用程序调用
(3)MFC窗口程序
单文档视图架构程序
多文档视图架构程序
对话框应用程序
三、MFC程序
1、控制台程序
(1)创建
(2)介绍
双冒号开头函数为win32的API函数,如:
::GetModuleHandle(NULL);
以Afx开头函数为MFC库的全局函数,如:
AfxWinInit(hModule, NULL, ::GetCommandLine()
2、MFC库程序
MFC静态库
(1)创建
MFC动态库
(1)创建
MFC扩展库
(1)创建
(2)说明
扩展库只能被MFC应用调用,而且该库使用动态的MFC库
3、MFC窗口程序
单文档框架程序
(1)创建
(2)说明
参与架构的类:
应用程序类:负责程序流程 class CMFCSdlApp : public CWinApp 框架窗口类:负责程序主框架 class CMainFrame : public CFrameWnd 视图类:负责窗户口显示 class CMFCSdlView : public CView 文档类:负责数据管理数据 class CMFCSdlDoc : public CDocument
多文档框架程序
(1)创建
(2)说明
参与架构的类:
应用程序类:负责程序流程 class CMFCMdiApp : public CWinApp 多文档主框架窗口类 class CMainFrame : public CMDIFrameWnd 多文档子框架窗口类 class CChildFrame : public CMDIChildWnd 视图窗口类:显示数据 class CMFCMdiView : public CView 文档类:数据管理 class CMFCMdiDoc : public CDocument
对话框应用程序
(1)创建
(2)说明
参数框架类:
应用程序类:管理流程 class CMFCDlgApp : public CWinApp 对话框窗口类 class CMFCDlgDlg : public CDialogEx
四、MFC类库介绍
1、MFC库的相关类介绍
(1)CObject类
MFC类绝大部分的父类,提供了MFC类库中的一只些基本机制
对运行时类信息的支持
对动态创建的支持
对序列化的支持
(2)CWinApp类 应用程序类,封装了应用程序,线程等信息
(3)CDocument类 文档类,管理数据
(4)Frame Windows 框架窗口类,封装了窗口程序组成的各种框架窗口
(5)CSplitterWnd 用来完成拆分窗口的类
(6)Control Bars 控件条(工具栏)类
(7)Dialog Boxes 对话框类,封装了各种对话框
(8)View 视图类,封装了各种显示窗口
(9)Control 控件类,封装了各种常用的控件
(10)Exceptions 异常处理类,封装了中常用的各种异常
(11)File 文件类,各种文件的I/O操作
(12)绘图类,包括CDC类和CGdiObject类
(13)数据集合类,CArray/Clist/CMap,封装了相应的数据结构管理
(14)非Cobject类的子列
CPoint,CTime,CString
五、第一个的MFC程序
1、创建
Win32程序使用MFC,即可以创建一个MFC应用程序
2、实现MFC应用程序基本框架
// MFCBase.cpp #include <afxwin.h> //框架窗口类 class CMyFrameWnd : public CFrameWnd { }; //应用程序类 class CMyWinApp : public CWinApp { public: CMyWinApp() { } virtual BOOL InitInstance(); }; //初始化函数:InitInstance //退出释放函数:ExitInstance BOOL CMyWinApp::InitInstance() { CMyFrameWnd* pFrame = new CMyFrameWnd; pFrame->Create(NULL, "MFCBase"); m_pMainWnd = pFrame; pFrame->ShowWindow(SW_SHOW); pFrame->UpdateWindow(); return TRUE; } //应用程序类对象,MFC程序入口 CMyWinApp theApp;
3、程序解析
(1)程序启动流程
构造theApp对象,掉调用父类CWinApp的构造函数
将theApp对象的地址保存到线程状态信息中
将theApp对象的地址保存到模块状态信息中
进入WinMain函数,调用AfxWinMain函数(打断点,通过调用堆栈进入)
AFX_MODULE_STATE aaa;//当前程序模块状态信息 AFX_MODULE_THREAD_STATE bbb; //当前程序线程状态信息 CWinApp::CWinApp()//构造全局对象CMyWinApp theApp { AFX_MODULE_STATE* pModuleState = AfxGetModuleState(); //获取全局变量&aaa AFX_MODULE_THREAD_STATE* pThreadState = pModuleState->m_thread; //获取全局变量&bbb pThreadState->m_pCurrentWinThread = this;//将&theApp保存到bbb的一个成员中 AfxGetThread() { AFX_MODULE_THREAD_STATE* pState = AfxGetModuleThreadState();//获取&bbb CWinThread* pThread = pState->m_pCurrentWinThread; return pThread;//返回的为&theApp } pModuleState->m_pCurrentWinApp = this;//将&theApp保存到aaa的一个成员中 AfxGetApp() { return AfxGetModuleState()->m_pCurrentWinApp;//返回&theApp } } WinMain(...)//程序流程是不是theApp对象指导向哪走 { AfxWinMain(...) { CWinThread* pThread = AfxGetThread(); CWinApp* pApp = AfxGetApp();//这两代码都是获取&theApp pApp->InitApplication();//利用theApp对象调用应用程序类成员虚函数 初始化 pThread->InitInstance();//利用theApp对象调用应用程序类成员虚函数 创建并显示窗口 pThread->Run()//利用theApp对象调用应用程序类成员虚函数 消息循环 { for (;;) { while(没有消息时) OnIdle(..);//利用theApp对象调用应用程序类成员虚函数 空闲处理 do{ if(GetMessage抓到WM_QUIT) return ExitInstance(); //程序结束前,利用theApp对象调用应用程序类成员虚函数 善后处理。 }while(...) } } } }
代码链接:https://download.csdn.net/download/liutit/
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/125421.html