MFC简介以及基础使用(小白级别入门讲解)

一、Windows消息机制

1.1窗口

一个Windows应用程序中至少有一个窗口,称为主窗口。我们在客户区进行图案的绘制。

1.2句柄

一个Windows应用程序是包含图标、光标等许多部件(资源),系统在为这些部件(资源)分配内存后会返回他们的标识号,也就是所谓的句柄。比如在Windows应用程序中,使用窗口句柄来标识每一个窗口。对窗口进行操作时候,首先就是得到这个窗口的标识。

1.3消息与消息队列

Windows是事件驱动方式的程序设计,当一个Windows应用程序开始执行的时候,系统会产生一个消息队列,用于保存这个窗口的消息。eg:当你自己在一个窗口中按下键盘时候(事件),系统会收集到这个按下键盘事情(事件),然后包装成消息,放到这个窗口的消息队列中(窗口过程)。因为队列的先进先出的特点,这时候窗口会一个一个的读取消息,然后进行相应的执行处理。

1.4WinMain函数

控制台DOS中的入口是mian函数,而WinMain函数就是Windows程序的入口函数。启动一个应用程序时候就开始先调用WinMain函数

1.5Windows编程模型

一个应用程序的功能是:创建一个窗口,然后响应键盘或者鼠标消息。

  • WinMain函数的定义
  • 创建窗口
  • 消息循环
  • 窗口过程

二、MFC的简单使用

2.1MFC简介

MFC是微软基础类库,以C++类的形式封装了Windows API,并且包含一个应用程序框架。类中包含了大量的windows句柄封装类和很多windows的组件和内建控件的封装类。MFC把Windows SDK API函数包装成了几百个类,MFC给Windows系统提供面向对象的接口,支持可重用性、自包含性以及OPP原则。

2.2MFC程序入口

MFC.h

//mfc头文件
#include<afxwin.h>

//1、应用程序类CWinApp,MyAPP派生类
class MyApp : public CWinApp{
public:
    //父类的虚函数,需要派生类进行重写
    //也是MFC函数的入口函数
    virtual BOOL InitInstance();
};

//2、框架类CFrameWnd,MyFrame派生类
class MyFrame : public CFrameWnd{
public:
    //构造函数
    MyFrame();
}

MFC.cpp

//对应类的头文件
#include "mfc.h"

//有且只有一个的全局应用程序类的对象
MyApp app;

//程序入口
BOOL MyApp::InitInstance(){
    //1、创建类框架
    MyFrame *frame = new MyFrame;
    //2、显示窗口
    frame -> ShowWindow(SW_SHOWNORMAL);
    //3、更新窗口
    frame -> UpdateWindow();
    //4、保存框架类对象指针
    m_pMainWnd = frame;
    return TRUE;
}

//重写构造函数
MyFrame::MyFrame(){
    //创建窗口
    Create(NULL,TEXT("mfc"));
}

2.3MFC的消息映射

息映射就是将消息和成员函数相互关联的表。比如,Windows将一个鼠标左击消息放到一个框架窗口消息队列中,然后这个窗口取到这个消息时候,MFC将搜索该窗口的消息映射,如果存在一个处理鼠标左击消息(WM_LBUTTONDOWN)的处理程序,就调用。

下面是如何在一个类中编写一个消息映射

  • 在操作的类中声明消息宏
  • 通过放置标识消息的宏来执行消息映射,相应的类将对BEGIN_MESSAGE_MAP和END_MESSAGE_MAP的调用之间处理消息

mfc.h

class MyFrame : public CFrameWnd{
public:
    MyFrame();

    //声明消息宏
    DECLARE_MESSAGE_MAP()
}

mfc.cpp

//定义消息宏,在类中实现(派生类,父类)
BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)
    ON_WM_LBUTTONDOWN
END_MESSAGE_MAP()

//重写构造函数
MyFrame::MyFrame(){
    //创建窗口
    Create(NULL,TEXT("mfc"));
}

对应的处理函数分别在类中声明,类外定义

mfc.h

//框架类CFrameWnd,MyFrame派生类
class MyFrame : public CFrameWnd{
public:
    //构造函数
    MyFrame();
    //声明消息宏
    DECLARE_MESSAGE_MAP()
    //函数声明
    dfx_msg void OnLButtonDown(UINT,CPoint);
}

mfc.cpp

//定义消息宏,在类中实现(派生类,父类)
BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)
    ON_WM_LBUTTONDOWN
END_MESSAGE_MAP()

//重写构造函数
MyFrame::MyFrame(){
    //创建窗口
    Create(NULL,TEXT("mfc"));
}

//定义具体函数的实现
void OnLButtonDown(UINT,CPoint){
    .......
    .......
}

2.4创建项目时候使用MFC模板

创建之后,会产生下面的几个类

在这里插入图片描述

其中要记住,我们的处理函数就是在视图类中编写。可以理解原来的框架类是作为底图,现在的视图类是叠加在上面的一个白板区域,就在这上面绘制渲染

2.5VS2019中的类向导使用

ctrl+shift+x可以快速调出类向导。所谓类向导,就是帮助你快速的产生消息映射,再也不用像上面一样自己手写开始宏,结束宏…会自动帮你生成这些。
在这里插入图片描述

三、MFC的绘图简介

3.1MFC绘图基本介绍

Windows GDI 是Windows提供的图像设备接口,可以将图形绘制在显示器上

MFC是提供2个类来支持调用GDI:

  • DC类:用来设置绘图属性和绘制图形
  • 绘图对象类:封装了各种GDI绘图对象,包括画笔,刷子,字体…

而在MFC中图像设备接口被抽象为CDC类,CDC类封装了所有的GDI函数,所以使用CDC类绘图,而窗口操作在CWnd类。

CDC类中又有4个子类

  • CClientDC 操作用户区,在鼠标绘图,绘制文本时候要用到它
  • CMetaFileDC 设备环境类,在构造期间执行BeginPaint,析构期间执行EndPaint
  • CPaintDC
  • CWindowsDC

3.2CDC类

GetDC、releaseDC是CWnd类的成员函数
CreateDC、DeleteDC是CDC类的成员函数

下面是展示三种获取设备环境对象的方法、

void CDrawTestView::Draw(CDC *pDC)
{
  //使用传入CDC的对象指针绘图指针
  pDC -> LineTo(200,100);

  //构造CClientDC设备环境对象指针
  CClientDC dc(this);
  dc.LineTo(200,200)

  //通过GetDC函数获得设备环境对象指针
  CDC* p = this ->GetDC();
  p->LineTo(100,200);
  //利用GetDC函数获得的设备环境对象必须使用ReleaseDC函数释放
  this->ReleaseDC(p);
}
  • 91
    点赞
  • 444
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
MFC(Microsoft Foundation Class)框架是用于Windows平台上编写图形用户界面(GUI)应用程序的一种应用程序框架。如果您是一位新手小白,想要入门MFC框架视频精讲,我建议您可以从以下几个方面来学习。 首先,有基础C++语言知识是必不可少的。MFC是基于C++的,因此您需要具备C++基础知识,例如语法、数据类型、控制结构、函数、类、指针等。 其次,您需要了解MFC中的窗口和消息机制。在MFC框架中,窗口是应用程序的基本组成部分,消息是应用程序中不同组件之间的通信方式。您需要了解如何创建和管理窗口,如何处理和发送消息。 接下来,您可以学习MFC中的视图和文档架构。视图和文档是MFC中模型-视图-控制器(MVC)架构的实现方式之一。通过学习视图和文档的实现,您可以了解如何将数据与应用程序的用户界面进行交互和管理。 最后,您可以了解MFC中的其他常见控件和类。MFC中包含许多常见的控件和类,例如按钮、编辑框、列表框、对话框、线程等。您可以了解这些控件和类的使用方法以更好地开发应用程序。 总之,入门MFC框架需要将C++基础知识与MFC框架中的窗口、消息、视图、文档等概念相结合,同时掌握常见的控件和类的使用方法。通过这些基础知识,您可以开始开发简单的MFC应用程序并逐步提高自己的应用开发能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值