MFC的设计者们在设计MFC时,紧紧把握一个目标,那就是尽可能使得MFC的代码要小,速度尽可能快.为了这个目标,他们使用了许多技巧,其中很多技巧体现在宏的运用上,实现MFC的消息映射的机制就是其中之一.  同MFC消息映射机制有关的宏有下面几个:  DECLARE_MESSAGE_MAP()宏  BEGIN_MESSAGE_MAP(theClass, baseClass)和END_MESSAGE_MAP()宏  弄懂MFC消息映射机制的最好办法是将找出一个具体的实例,将这些宏展开,并找出相关的数…
1.应用程序类 CWinApp https://docs.microsoft.com/zh-cn/cpp/mfc/reference/cwinapp-class?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev15.query%3FappId%3DDev15IDEF1%26l%3DZH-CN%26k%3Dk(AFXWIN%2FCWinApp);k(CWinApp);k(DevLang-C%2B%2B);k(TargetOS-Windows)…
1.3.4 绘制窗口 如何在屏幕上随心所欲的进行绘制?应用程序通过响应来自Windows的WM_PAINT消息进行绘制的,此消息通知它更新窗口. WM_PAINT消息如何发生:窗口位置改变:窗口大小改变:窗口显示部分改变等. 应用程序通过响应WM_PAINT消息绘制其窗口的客户区.在该例程中,WM_PAINT消息由CMainWindow::OnPaint来处理,每一个WM_APINT消息到来时都会调用它.OnPaint的主要工作就是在窗口客户区中央位置绘制文本. 绘制文本是通过构造一个名为dc的…
1.3.2 MFC如何使用应用程序对象 MFC程序没有main函数,没有WinMain函数,到底是什么启动了程序的运行? 一个MFC提供的源代码中(Winmain.cpp)包含了一个AfxWinMain函数,它在MFC中相当于WinMain.AfxWinMain广泛使用应用程序对象,因此在应用程序对象必须作全局声明的原因.全局变量和对象在任何其它代码执行之前被创建,在AfxWinMain运行之前,应用程序对象必须在内存中存在. 运行的顺序: 1 AfxWinMain调用AfxWinInit函数初…
1.3.1 应用程序对象 MFC应用程序的核心就是基于CWinApp类的应用程序对象,CWinApp提供了消息循环来检索消息并将消息调度给应用程序的窗口.当包含头文件<afxwin.h>,可以将CWinApp以及其它MFC类引入程序.一个MFC应用程序有且只有一个应用程序对象,此对象必须声明为全局范围内有效,以便在程序的开始即被实例化. 应用程序类被命名为CMyApp,其实例化为: CMyApp myapp; CMyApp CMyApp继承CWinApp,且没有声明任何数据成员,只是覆盖了一个…
#include <afxwin.h> class CMyApp : public CWinApp { public: virtual BOOL InitInstance(); }; class CMainWindow: public CFrameWnd { public: CMainWindow(); protected: afx_msg void OnPaint(); DECLARE_MESSAGE_MAP() }; HelloWorld.h #include "Hello.h&…
1.MFC介绍及环境搭建 MFC全程为Microsoft Foundation class Library,即微软的基本类库,MFC实际上是一个庞大的文件库,它由指向文件和源文件组成. 首先,打开visual2017,进行如下操作: 此时,会发现新建项目中无法找到创建MFC工程 这是因为没有配置MFC开发环境,关闭visual studio打开visual studio installer 选择修改,可以打开如下窗口 勾选后,点击修改,此时就进入了安装界面,这里需要等待15分钟左右 2.利用向导…
使用Visual Studio新建一个空项目,项目命名为HelloMFC,完成后,打开项目属性页面,将配置属性选项卡中的常规项打开,将其中的MFC的使用属性栏改为:在静态库中使用MFC或者在共享DLL中使用MFC,同时将字符集属性栏改为使用Unicode字符集. 图1-1 新建一个空项目 图1-2 更改项目属性 完成以上更改后,在项目头文件中添加新建项头文件,命名为Hello.h,头文件代码如下: class CMyApp : public CWinApp { public: virtual B…
1.3.3 框架窗口对象 MFC的CWnd类及其派生类为窗口或应用程序创建的窗口提供了面向对象的接口. CMainWindow是从CFrameWnd类派生而来,CFrameWnd模仿框架窗口的行为,可以把框架窗口作为顶层窗口看待,它是应用程序与外部世界的主要接口. Create(NULL,_T(“The Hello Application”)) Create 通过生成窗口对象并调用其Create或者CreateEx函数(从CFrameWnd继承),MFC应用程序可以创建一个窗口: BOOL Cr…
切换项目结构模式 Project模式的项目结构 我们将项目切换成Project模式,这就是真实的目录结构. .gradle和.idea 这两个目下放置的都是Android Studio自动生成的一些文件,我们无须关系,也不要去手动编辑. app 项目中的代码.资源等内容几乎都是放置在这个目录下的. build 它主要包含了一些在编译时自动生成的文件,不需要过多关心. gradle 这个目录下包含了gradle wrapper的配置文件. .gitignore 这个文件是用来指定的目录或文件排除在…