MFC创建窗口流程(笔记)

一、窗口建立

创建桌面项目,建立类似如下两个文件

在项目中,找到“高级”->“MFC的使用”,修改为下图所示

注意,如果在后面的运行中出现缺少mfcXXX,dll的情况,请自行下载对应组件后放入系统文件(system32/syswow64)中。如果仍旧不行,请核对上诉修改的配置器是否为编译时使用的(release/debug,86/64)。

mfc.h文件中:

#pragma once

#include

//应用程序类

class MyApp :public CWinApp {

public:

//该处为MFC程序的入口地址

virtual BOOL InitInstance();

private:

};

//框架类

class MyFrame :public CFrameWnd {

public:

MyFrame();

private:

};

mfc.cpp中

#include "mfc.h"

#pragma once

MyApp myApp;//全局唯一的MyAPP对象,代表整个进程实例

BOOL MyApp::InitInstance(){

/*

1.创建框架类对象

2.显示窗口

3.更新窗口

4.保存框架类对象指针

*/

MyFrame* frame = new MyFrame;

//显示窗口,此处用的正常显示

frame->ShowWindow(SW_SHOWNORMAL);

//更新窗口

frame->UpdateWindow();

//保存框架类对象指针

m_pMainWnd = frame;

return TRUE;

}

MyFrame::MyFrame(){

//CWnd类的成员函数

//CFrameWnd继承于CWnd

//类名(NULL表示用默认名),标题,之后有默认值

Create(NULL,TEXT("MFC"));

}

结果

1.一个MFC程序中,有且只有一个全局应用程序类对象(myApp)

2.在程序入口函数实现功能(InitInstance())

2-1.为框架类的准备一个无参构造函数,使用CWnd::Create,完成成员的初始化

2-2.创建MyFrame对象,并为其分配空间

2-3.为框架类设置显示模式

2-4.调用框架类对象的更新窗口函数

2-5.保存框架类的指针

二、事件处理

消息映射

1.在框架类中,声明消息映射宏

//框架类

class MyFrame:public CFrameWnd {

public:

MyFrame();

//声明消息映射宏

DECLARE_MESSAGE_MAP()

private:

};

2.在实现文件中类外定义消息宏

3.程序会在Begin与End之间不断循环,在其间添加事件,该事件发生时会返回消息映射宏。

//定义消息宏

//派生类,基类

BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)

ON_WM_LBUTTONDOWN()//鼠标左键被点击

END_MESSAGE_MAP()

4.为事件声明其处理函数

//框架类

class MyFrame:public CFrameWnd {

public:

MyFrame();

//声明消息映射宏

DECLARE_MESSAGE_MAP()

afx_msg void OnLButtonDown(UINT, CPoint);

private:

};

5.于MFC.cpp中实现它

void MyFrame::OnLButtonDown(UINT, CPoint){

MessageBox(TEXT("鼠标左键被点击"));

}

结果:

绘图事件

相同方式,声明消息处理函数

afx_msg void OnPaint();

绘图事件

ON_WM_PAINT()

实现部分

cdc为绘画实例,构造时需填入指被画对象(this)

void MyFrame::OnPaint(){

CPaintDC cdc(this);

cdc.TextOutW(100,100,TEXT("你好MFC"));//x轴,y轴,文字

}