HOME> 世界杯颁奖仪式> MFC简介以及基础使用(小白级别入门讲解)

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

一、Windows消息机制 1.1窗口 一个Windows应用程序中至少有一个窗口,称为主窗口。我们在客户区进行图案的绘制。 1.2句柄 一个Windows应用程序是包...

一、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

//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,析构期间执行EndPaintCPaintDCCWindowsDC

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);

}


低频浑厚高频亮 拜亚动力DTX910评测 探秘倩女幽魂手游新区开放规律,多久开一次新区?