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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM