MFC原理第一讲.MFC的本质.以及手工编写MFC的程序

        MFC原理第一讲.MFC的本质.以及手工编写MFC的程序

PS: 这个博客属于复习知识.从头开始讲解. 在写这篇博客之前.已经写了3篇MFC的本质了.不过掌握知识点太多.所以从简重新开始.

一丶MFC的本质是什么.

  MFC的本质其实就是Win32程序的一种封装. 其实就是封装好了.我们直接用就行了.

二丶手工编写一个MFC程序.

  手工编写MFC程序.需要熟悉两个类

  一个是CWinAPP,一个是CFramWnd类. 

这两个类的作用.

  CWinAPP  这个主要就是保存窗口的一些数据.跟窗口本身无关.

  CFrameWnd 这个类主要就是创建窗口. 跟窗口有关的一个类.

看下MFC的窗口继承图:

  

首先就是不管那个类.顶层的类就是CObject类.

CWinAPP的顶层类是Cobject  CFrameWnd也是.

总的来说. 这两个类一个是保存数据.一个是跟窗口有关.

总结:  

  CWinAPP  这个类就是与程序有关.与窗口无关.并且保存数据和动作的一个类.

  CFrameWnd 这个类就是与窗口有关的一个类. 管理窗口的.

三丶如何开始编写一个简单的MFC窗口类

  既然上面我们熟悉了两个类的作用. 那么还要熟悉里面的成员方法.

  CWinApp 里面的 InitInstance虚函数.  这个主要是保存窗口句柄. 显示更新窗口. 与程序有关.与窗口无关.

  CFrameWnd 里面的Create  这个其实就是创建窗口.  我们的CWinAPP里面需要创建CFramWnd 窗口类.并且保存窗口句柄. 所以CFrameWnd是管理窗口的.

编写MFC类的步骤.

  1.创建Win32工程.

  2.添加一个头文件.跟一个.cpp文件.

  3.头文件中定义字节的 CMyApp 并且继承 CWinAPP. 重写虚方法 InitInstance

  4.头文件中接着定义 自己的CMainWnd类. 继承CFrameWnd. 并且提供构造.构造里面创建窗口.

  5.CPP 文件必须包含MFC类库. afxWin.h

  6. 使用MFC 静态库的方式.

例如下图:

  

具体实现代码:

  1. .h文件的代码.

  

#pragma once


#ifndef MY_FIRST_MFC_936d35ee_d677_44be_a8ae_1ea4b1c7c086
#define MY_FIRST_MFC_936d35ee_d677_44be_a8ae_1ea4b1c7c086

class CMyApp :public CWinApp
{
    //1覆盖虚函数 保存创建窗口的一些数据. 但跟窗口本身无关.
public:
    virtual BOOL InitInstance(); 
};

//框架类
class CMainWnd : public CFrameWnd
{
    //构造函数.构造create窗口  主要跟窗口有关的一个类.
public:
    CMainWnd();

};
#endif // !MY_FIRST_MFC_936d35ee_d677_44be_a8ae_1ea4b1c7c086

.cpp的窗口代码.

#include <afxwin.h>
#include "FirstMfc.h"

CMyApp  theApp;

BOOL CMyApp::InitInstance()
{
    //窗口窗口保存在m_painWnd
    m_pMainWnd = new CMainWnd;        创建我们的窗口保存在m_pMainWnd中. m_pMainWnd成员是专门保存窗口句柄的.这个成员在CWinThread中定义. 这个类先不用管是什么类.
    m_pMainWnd->ShowWindow(m_nCmdShow);
    m_pMainWnd->UpdateWindow();
    return TRUE;
}

CMainWnd::CMainWnd()
{
    //创建窗口
    Create(NULL, TEXT("HelloMfc"));
}

应用程序截图:

  

四丶带着疑问学习

  疑问:

    1.不是说MFC是对Win32程序的封装吗.但我们很简单的就创建除了窗口.那么Winmain在哪里.

    2.消息处理在哪里.

以上疑问我们会慢慢讲到. 如果有兴趣.可以看看MFC源码.也可以看看我以前写过的MFC原理的博客.

代码链接: 链接:https://pan.baidu.com/s/1yS2CBfCLiUY9OJHw9NwD7Q 密码:6z6w

原文地址:https://www.cnblogs.com/iBinary/p/9628460.html