怎么形象地理解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

相关推荐

  • 为什么MVCC可以解决幻读

    为什么MVCC可以解决幻读的主要原因有:1、版本链机制;2、读写隔离;3、使用间隙锁;4、具有高并发性。MVCC通过版本链(Version Chain)来实现。版本链能记录每一个数据行的修改版本,每次对数据的修改都会在版本链上增加一个新版本,而旧版本数据并不会立即删除,而是保存在版本链中。在一个事务…

    2023年7月12日
    62100
  • 文心一言与西方修辞学有何异同

    本文旨在探讨文心一言与西方修辞学的异同。文心一言,源于司马迁的《史记·太史公自序》,是中文修辞的精髓。西方修辞学,则起源于古希腊,由亚里士多德等人奠基。这两者在目的性、功能性、表现手法上均有共通之处。1、两者都强调言辞对于情感的影响和说服力的重要性;2、均视修辞为提高文辞效果的工具;3、都以恰当、清…

    2023年11月29日
    30300
  • 版本管理的主要内容包括什么

    版本管理主要内容包括:1、版本的前期规划;2、在版本开发时;3、在版本发布后。在版本开发前通过建立版本号标识,明确版本目标,制定好版本上线需求内容,设计好发布策略,可以让产品功能和质量尽可能地符合用户的预期。 1、在版本开发前 通过建立版本号标识,明确版本目标,制定好版本上线需求内容,设计好发布策略…

    2022年11月30日
    1.1K00
  • 函数式编程的底层架构和命令式编程的区别

    区别是:函数式语言和命令式语言(含面向对象)编译过程中最大的不同是做完parsing和type checking之后,函数式语言一般会被翻译成一个类似lambda演算的简单语言,然后再转换成低级指令;而命令式语言直接被转换成低级指令。 函数式编程的底层架构和命令式编程的最底层肯定都是汇编。 函数式语…

    2023年2月20日
    48600
  • epc项目管理要点有哪些

    EPC项目管理关键包含了1、全面的规划与设计、2、精密的成本控制、3、严密的进度监管、4、严格的质量保证、5、协调的供应链管理。特别是在全面的规划与设计方面,要求项目经理需在项目初期就明确项目目标、范围、资源及对潜在风险的评估。 一、全面的规划与设计 EPC(工程、采购、建设)项目管理要素之一便是项…

    2024年1月8日
    33400
  • Zookeeper和YARN的区别是什么

    Zookeeper和YARN的主要有两点区别:一、定位不同;二、作用不同;yarn 是为了提高资源利用率,也就是多类程序的资源分配。而zookeeper是分布式程序的协调服务,可以说是某一类程序。 一、定位不同 Yarn是分布式资源管理器,Zookeeper是分布式协作服务。 YARN是实现“一个集…

    2023年3月19日
    85400
  • HCR慧辰资讯董事长兼CEO赵龙:上市只是开始,“一云两数”布局数字化赛道

    文| babayage 编辑 | 笑 笑 2020年7月16日,北京慧辰资道资讯股份有限公司(股票代码:688500,简称:HCR慧辰资讯)在科创板上市。 时近一年,HCR慧辰资讯董事长兼CEO赵龙与《科创人》进行了一次足斤足量的诚意分享。沟通话题遍及个人成长、创业经验、管理心得、上市经历、公司未来…

    2022年3月20日
    75100
  • 如何管理存量信贷资产项目

    管理存量信贷资产项目是一项综合性工作,关键在于优化资产结构、加强风险控制、提高资产效率、实施动态管理。在众多管理手段中,加强风险控制尤为重要。它不仅能够确保资产质量,还能够为银行带来长期可持续的利润。风险控制通常包括信贷审批的规范化、贷后管理的实时监控、及时的风险识别及评估,以及有效的风险缓释措施。…

    2024年4月10日
    3900
  • 工程副总如何管理好项目

    管理好项目是工程副总的重要职责,它涉及到多个方面,比如明确项目目标、建立高效的团队、保持良好的沟通、项目风险管理、以及时间与成本控制等。特别是在建立高效的团队方面,它不仅需要找到合适的人才、构建跨部门的合作机制,还要注重团队成员之间沟通与协作的效率,确保每个人都能发挥出最大的能力。这样,项目管理就不…

    2024年4月10日
    3700
  • 如何管理子公司项目进度

    子公司项目进度的管理涉及到周密的规划、有效的沟通以及严格的监控。首先、要确立明确的项目目标和进度计划,借助项目管理工具来跟踪各个阶段的完成情况,其次、保持与项目团队的定期沟通,通过会议或报告来更新项目状态,再次、对潜在的风险与阻碍进行分析和处理。其中确立明确的项目目标和进度计划尤为关键,它为项目的顺…

    2024年4月10日
    4400

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部