mfc开始使用mfc


备注

Microsoft基础类MFC )是一个库,它提供围绕Win32 API的面向对象的包装器。通过将“原始”Win32 API封装在C ++类中,MFC使创建GUI应用程序和管理资源变得更加容易。

MFC已经存在了很长时间。它于1992年首次引入微软C / C ++编译器的第7版。此时,C ++开发刚刚起步。 Visual Studio的后续版本附带了显着改进的MFC版本。它仍然包含在最新版本的Visual Studio 2015中。但遗憾的是,它的遗留根源非常明显。由于大多数是在C ++语言标准化之前开发的,因此MFC类没有充分利用模板等现代C ++特性,提供自己的其他标准C ++特性(如RTTI)的自定义实现,并使用许多非标准习语。这些事实使得用微软以外的任何编译器编译MFC应用程序几乎是不可能的。但是,从好的方面来说,MFC已经很好地集成到Visual Studio中,使开发变得更加容易。

在早期开发期间,该库被称为Application Framework Extensions(缩写为AFX)。营销部门后来改名为MFC,但改变任何代码为时已晚,因此大部分代码仍然引用“Afx”而不是“Mfc”。一个值得注意的例子是Visual Studio自动生成的标准预编译头文件:它名为StdAfx.h

2008年4月7日,Microsoft发布了对MFC类的更新,作为对Visual Studio 2008和MFC 9的带外更新。该更新具有新的用户界面结构,包括功能区(类似于Microsoft Office 2007)和关联的UI小部件,完全可自定义的工具栏,停靠窗格(如Visual Studio 2005),可以自由浮动或停靠到任何一侧和文档选项卡。新功能在新类中提供,以便旧应用程序仍可继续运行。此更新建立在BCGSoft的 BCGControlBar Library Professional Edition之上,并被命名为MFC Feature Pack

所以现在MFC由两个具有不同方法的库组成:

  • 经典MFC(Win32 API包装器)。
  • MFC功能包(来自Win32 API控件的混合集和新的自绘控件,如Ribbon)。

也可以看看:

一个基本的MFC程序

// Include the MFC header:
// (you do not need to and should not include the standard Windows headers, e.g. 
// Windows.h)
#include <AfxWin.h>               // MFC core and standard components
// The following header defines resource constants, such as dialog and control IDs:
#include "resource.h"

// The basic element of an MFC application is a class that inherits from CWinApp.
class CMyApp : public CWinApp
{
    // This gets called as the application gets initialized.
    virtual BOOL InitInstance()
    {
        // Initialize a CDialog object to show in a moment.
        CDialog dlg(IDD_DIALOG1);
        // Display the dialog box as a modal dialog box.
        dlg.DoModal();

        // Return FALSE from this method to exit the application.
        return FALSE;
    }
};

// The one and only application object.
CMyWinApp theApp;
 

摘要:

IDD_DIALOG1应该是由资源编辑器(例如Visual Studio内置的资源编辑器)创建的项目资源文件中定义的对话框的ID。 (资源文件通常具有.rc扩展名。)要自定义对话框的行为,可以从CDialog派生新类。

模式对话框运行自己的消息循环。调用“dlg.DoModal();”在用户关闭对话框之前不会返回。

如果我们从InitInstance()返回TRUE,它将启动应用程序的消息循环。当您拥有一个更复杂,非基于对话框的应用程序时,可以使用此选项。