怎么形象地理解MFC编程框架

微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。

怎么形象地理解MFC编程框架-Worktile社区

一、MFC 的概念

微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

MFC除了是一个类库以外,还是一个框架,在vc++里新建一个MFC的工程,开发环境会自动帮你产生许多文件,同时它使用了mfcxx.dll。xx是版本,它封装了mfc内核,所以你在你的代码看不到原本的SDK编程中的消息循环等等东西,因为MFC框架帮你封装好了,这样你就可以专心的考虑你程序的逻辑,而不是这些每次编程都要重复的东西,但是由于是通用框架,没有最好的针对性,当然也就丧失了一些灵活性和效率。但是MFC的封装很浅,所以效率上损失不大。

二、MFC框架的理解

1、MFC为微软基础类库。以程序的形式封装微软的API,即操作系统留给应用程序的调用接口。MFC框架包含应用程序框架,以减少应用程序开发人员的工作量。

  2、MFC框架为窗口对象。MFC是程序直接创建,然后在程序执行中随着窗口类构造函数的调用而生成,随着析构函数的调用而消失。

3、MFC框架可以创建窗口对象。MFC框架下创建窗口对象分两步,首先创建MFC窗口对象,然后创建对应的微软窗口。最后在内存使用上,MFC窗口对象可以自动创建。

转载于:https://www.cnblogs.com/BensonLaur/p/5234575.html

延伸阅读

MFC框架结构的分析

1、框架代码文件的结构

主要有4个部分组成:
1) 资源文件Resource.h:主要是定义资源的ID。
2) 预编译文件:可以用来解决头文件包含冲突的问题,定义一些需要全局性包含的文件。
3) 应用程序类对应文件:项目名称是TestOne,对应类名为CTestOneApp。
4) 对话框类:项目名称是TestOne,对应类名为CTestOneDlg。

2.应用程序类

MFC定义了一个应用程序基类CWinApp,所有基于MFC的应用程序都会继承这个类。TestOne项目也不例外,此时的应用程序类是CTestOneApp,定义如下:

class CTestOneApp : public CWinApp
{
public:
    CTestOneApp();
public:
    // 重载虚函数
    virtual BOOL InitInstance();
    // 实现
    DECLARE_MESSAGE_MAP()
};
 
 
BOOL CTestOneApp::InitInstance()
{  
    //初始化应用程序环境包控件等操作,省略部分代码.    
    CWinApp::InitInstance();..
    //省略部分代码...    
    //定义对话框对象
    CTestOneDlg dlg;
    //保存对话框到全局变量
    m_pMainWnd = &dlg; 
    //显示对话框
    INT_PTR nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {
        //“确定”来关闭对话框的代码
    }
    else if (nResponse == IDCANCEL)
    {
        //“取消”来关闭对话框的代码
    }
    // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, 而不是启动应用程序的消息泵。
    return FALSE;
}

InitInstance()这个函数可以看作MFC程序的入口函数,main函数隐藏在这个函数中。在实际的开发中,一般不需要对这个类进行操作,但如果需要在建立主对话框之前处理一些数据或者准备工作,那么就可以把代码添加到这个函数中,主对话框显示之前。

3.对话框类

MFC主对话框类(主对话框是指与项目名称一致的那个类对应的对话框,下同)CTestOneDlg继承CDialogEx类,CDialogEx又继承CDialog类,这个可以通过类转到定义查看,对话框类负责与用户交互,处理用户消息,接受用户输入。类的定义如下:

// CTestOneDlg 对话框
class CTestOneDlg : public CDialogEx
{
public:
    // 标准构造函数
    CTestOneDlg(CWnd* pParent = NULL);
    // 对话框数据
    enum { IDD = IDD_TESTONE_DIALOG }; 
protected:
    // 动态数据交换,负责控件与变量之间的关联
    virtual void DoDataExchange(CDataExchange* pDX);   
protected:
    //应用程序句柄
    HICON m_hIcon;
    //重载初始化对话框
    virtual BOOL OnInitDialog();
    //定义消息WM_SYSCOMMAND处理函数
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    //定义消息WM_PAINT处理函数
    afx_msg void OnPaint();
    //定义消息ON_WM_QUERYDRAGICON处理函数
    afx_msg HCURSOR OnQueryDragIcon();
    //消息映射
    DECLARE_MESSAGE_MAP()
};

来源:本文为CSDN博主「「已注销」」的原创文章
原文链接:https://blog.csdn.net/qq_42746890/article/details/123531240

文章标题:怎么形象地理解MFC编程框架,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37287

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年2月7日 下午4:42
下一篇 2023年2月7日 下午5:12

相关推荐

  • 邮箱怎么写

    邮箱的写法:登录名@主机名.域名。其中@符号为电子邮箱地址格式分隔符,登录名为电子邮箱的用户名,主机名.域名为电子邮箱的服务器域名。不同的邮箱:1、qq邮箱;2、163邮箱;3、126邮箱;4、139邮箱;5、搜狐邮箱;6、gmail邮箱等。 一、邮箱的写法 邮箱的写法:登录名@主机名.域名。其中@…

    2023年3月25日
    300
  • 使用什么管理团队文档

    在现代商业环境中,更多的企业选择使用数字化管理方式来处理企业文件和信息。这种方式不仅可以提高工作效率,还可以降低企业成本。然而,有许多不同的工具可以用于管理团队文档,因此选择正确的工具非常重要。在本文中,将会详细讨论三种不同的工具,以及它们的优点和缺点。 1. 谷歌云硬盘 谷歌云硬盘是一种多功能的云…

    2023年3月3日
    1100
  • confluence如何固定表头

    confluence固定表头的方法是:先选中表格,插入宏“Tableenhancer”,在“Tableenhancer”宏编辑界面,找到“Number of rows to keep visible”,设置固定的行数就可以了。Confluence是一个专业的企业知识管理与协同软件,也可以用于构建企业…

    2023年3月30日
    200
  • http与https的区别

    http与https的区别有:1、定义不同;2、传输协议不同;3、连接方式不同;4、https需要申请证书;5、http页面响应速度比https快。http是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准。https是以安全为目标的http通道,简单讲是http的安全版。…

    2023年1月31日
    1500
  • JAVA的多态是什么

    JAVA的多态是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 JAVA的多态是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共…

    2023年1月30日
    4300
  • 差异备份和增量备份的区别是什么

    差异备份和增量备份的区别在于以下几个方面:1、含义上的区别;2、特性上的区别。其中,含义上的区别是指,增量备份,是在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件。 一、区别 1、含义上的区别 增量备份,是在一次全备份或上一次增量备份后,以后每次的备份只需备份与…

    2023年2月21日
    11300
  • confluence怎么创建目录

    confluence创建目录的步骤:1、指定要作为目录的标题格式;2、编辑文档;3、将该节作为目录;4、添加目录;5、选择目录的设置方式;6、插入目录。指定要作为目录的标题格式是指,设置标题级别,比如一级标题,二级标题。 一、confluence创建目录的步骤 二、Confluence 页面的编辑 …

    2023年2月3日
    83800
  • 燃尽图的作用是什么

    燃尽图的主要作用有:1、燃尽图可以在不同的时间周期下被使用。2、燃尽图中使用的指标可能是短期指标。3、市场运行中会有很多特殊情况,并且不同时期内的行情走势会不同。4、燃尽图可以用于预测趋势中的时间周期。 1、燃尽图可以在不同的时间周期下被使用 我个人是建议大家在不同的时间周期使用燃尽图,因为它在不同…

    2022年11月30日
    14000
  • 流程测试用例怎么写

    写流程测试用例的步骤:1、梳理业务流程;2、确定测试场景;3、编写测试用例;4、测试用例评审;5、执行测试用例;6、测试用例更新。在编写流程测试用例时,首先需要梳理业务流程,明确测试的目的和范围。 1、梳理业务流程 在编写流程测试用例时,首先需要梳理业务流程,明确测试的目的和范围。对于复杂的业务流程…

    2023年2月26日
    8800
  • 开发厂商内部项目管理工具一般用什么

    在开发厂商内部,为了更好地管理项目,提高团队协作效率,通常会使用一些项目管理工具。下面将详细介绍一些常用的项目管理工具。 1. JIRA JIRA是Atlassian公司推出的一款项目管理工具,它可以帮助团队进行敏捷开发,包括需求管理、任务管理、缺陷管理等。JIRA提供了丰富的定制化功能,可以根据不…

    2023年3月2日
    900

发表回复

登录后才能评论
联系我们
站长微信
站长微信
分享本页
返回顶部