1.5 MFC封装思想
生活随笔
收集整理的這篇文章主要介紹了
1.5 MFC封装思想
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
**************************************************
* 本文由小鳥飛飛整理發表 <samboy@sohu.com> *
* 首發網站:藍麗網 *
* 其他網站轉載請保留以上信息,謝謝! *
**************************************************
出差回來,繼續加班,找點時間,發一節講義。過幾天還要出差,不知道又得什么時候能回來,唉,也不知道這講義什么時候能發完。原來打字真的很累。
MFC思想博大精深,不是一節講義可以說明白的,這里只是給大家提供一個理解的思路。另外,要想更好的理解MFC的思想,需要用到C++的一些知識,主 要是類的定義、函數重載、構造函數與析構函數、類的繼承、虛函數、多態性以及數據類型的轉換,如果這些還不太清楚,先看看C++吧。
MFC與傳統的Windows程序的主要區別在于封裝,還記得我們前幾節的SDK創建窗口的程序吧。現在就以這個程序為基礎,介紹一下MFC的封裝特性。
int APIENTRY WinMain(HINSTANCE hInstance,
? ?? ?? ?? ?? ?HINSTANCE hPrevInstance,
? ?? ?? ?? ?? ?LPSTR ? ?lpCmdLine,
? ?? ?? ?? ?? ?int ? ?? nCmdShow)
{
// 第一步:設計窗口
// 第二步:注冊窗口
// 第三步:創建窗口
// 第四步:顯示窗口
// 第五步:消息循環
}
限于篇幅,就不寫完整的代碼了。該段代碼主要有三個部分組成:設計窗口中 (第一步)、注冊及創建顯示窗口(第二、三、四步)、消息循環(第五步)
MFC中采用了面象對角的思想,即用面向對象的C++思想對 以上代碼進行了封裝,也就是說將一些對窗口進行操作的API函數封裝到一個類中。下面我們進行第一步封裝。
class CMyWnd
{
public:
HWND m_hWnd;
BOOL Create();
BOOL ShowWindow();
};
BOOL CMyWnd::Create()
{
// 第一步:設計窗口
// 第二步:注冊窗口
// 第三步:創建窗口
}
BOOL CMyWnd::ShowWindow()
{
// 第四步:顯示窗口
}
此時WinMain函數形式如下:
int APIENTRY WinMain(HINSTANCE hInstance,
? ?? ?? ?? ?? ?HINSTANCE hPrevInstance,
? ?? ?? ?? ?? ?LPSTR ? ?lpCmdLine,
? ?? ?? ?? ?? ?int ? ?? nCmdShow)
{
CMyWnd m_hWnd;
m_hWnd.Create();
m_hWnd.ShowWindow();
// 第五步:消息循環
}
第二步封裝:
class CMyApp
{
public:
cMyWnd * m_pMainWnd;
BOOL InitInstance();
BOOL Runt();
CMyApp();
}
CMyApp::CMyApp()
{
if(InitInstance())
Run();
}
BOOL CMyApp::InitInstance()
{
CMyWnd m_wnd;
m_pMainWnd = &m_wnd;
m_pMainWnd->Create();
m_pMainWnd->ShowWindow();
return TRUE;
}
BOOL CMyApp::Run()
{
// 消息循環
return TRUE;
}
CMyApp theApp; // 全局變量
int APIENTRY WinMain(HINSTANCE hInstance,
? ?? ?? ?? ?? ?HINSTANCE hPrevInstance,
? ?? ?? ?? ?? ?LPSTR ? ?lpCmdLine,
? ?? ?? ?? ?? ?int ? ?? nCmdShow)
{
m_hInstance = hInstance; // 這里的代碼好像有點問題,可能運行不過去,因為不影響講解,我就沒有調試。
}
這樣一來,在WinMain函數中的代碼就只有 幾行了,而且每個程序都是一樣的,所以MFC就將WinMain函數封裝起來了,因此我們在MFC的工程里找不到WinMain函數。
WinMain函數不需要自己寫了,同時Run函數在所有程序中也是一樣的,只要基類實現了,其子類可以自動繼承,也就是說一般的程序設計我們僅僅需要實 現InitInstance函數,這也是MFC程序的入口點。
以上只是一個代碼游戲,不過可以很好的說明MFC類庫的封裝思想,要想 熟練使用MFC編程,還需要更深入的了解MFC。
* 本文由小鳥飛飛整理發表 <samboy@sohu.com> *
* 首發網站:藍麗網 *
* 其他網站轉載請保留以上信息,謝謝! *
**************************************************
出差回來,繼續加班,找點時間,發一節講義。過幾天還要出差,不知道又得什么時候能回來,唉,也不知道這講義什么時候能發完。原來打字真的很累。
MFC思想博大精深,不是一節講義可以說明白的,這里只是給大家提供一個理解的思路。另外,要想更好的理解MFC的思想,需要用到C++的一些知識,主 要是類的定義、函數重載、構造函數與析構函數、類的繼承、虛函數、多態性以及數據類型的轉換,如果這些還不太清楚,先看看C++吧。
MFC與傳統的Windows程序的主要區別在于封裝,還記得我們前幾節的SDK創建窗口的程序吧。現在就以這個程序為基礎,介紹一下MFC的封裝特性。
int APIENTRY WinMain(HINSTANCE hInstance,
? ?? ?? ?? ?? ?HINSTANCE hPrevInstance,
? ?? ?? ?? ?? ?LPSTR ? ?lpCmdLine,
? ?? ?? ?? ?? ?int ? ?? nCmdShow)
{
// 第一步:設計窗口
// 第二步:注冊窗口
// 第三步:創建窗口
// 第四步:顯示窗口
// 第五步:消息循環
}
限于篇幅,就不寫完整的代碼了。該段代碼主要有三個部分組成:設計窗口中 (第一步)、注冊及創建顯示窗口(第二、三、四步)、消息循環(第五步)
MFC中采用了面象對角的思想,即用面向對象的C++思想對 以上代碼進行了封裝,也就是說將一些對窗口進行操作的API函數封裝到一個類中。下面我們進行第一步封裝。
class CMyWnd
{
public:
HWND m_hWnd;
BOOL Create();
BOOL ShowWindow();
};
BOOL CMyWnd::Create()
{
// 第一步:設計窗口
// 第二步:注冊窗口
// 第三步:創建窗口
}
BOOL CMyWnd::ShowWindow()
{
// 第四步:顯示窗口
}
此時WinMain函數形式如下:
int APIENTRY WinMain(HINSTANCE hInstance,
? ?? ?? ?? ?? ?HINSTANCE hPrevInstance,
? ?? ?? ?? ?? ?LPSTR ? ?lpCmdLine,
? ?? ?? ?? ?? ?int ? ?? nCmdShow)
{
CMyWnd m_hWnd;
m_hWnd.Create();
m_hWnd.ShowWindow();
// 第五步:消息循環
}
第二步封裝:
class CMyApp
{
public:
cMyWnd * m_pMainWnd;
BOOL InitInstance();
BOOL Runt();
CMyApp();
}
CMyApp::CMyApp()
{
if(InitInstance())
Run();
}
BOOL CMyApp::InitInstance()
{
CMyWnd m_wnd;
m_pMainWnd = &m_wnd;
m_pMainWnd->Create();
m_pMainWnd->ShowWindow();
return TRUE;
}
BOOL CMyApp::Run()
{
// 消息循環
return TRUE;
}
CMyApp theApp; // 全局變量
int APIENTRY WinMain(HINSTANCE hInstance,
? ?? ?? ?? ?? ?HINSTANCE hPrevInstance,
? ?? ?? ?? ?? ?LPSTR ? ?lpCmdLine,
? ?? ?? ?? ?? ?int ? ?? nCmdShow)
{
m_hInstance = hInstance; // 這里的代碼好像有點問題,可能運行不過去,因為不影響講解,我就沒有調試。
}
這樣一來,在WinMain函數中的代碼就只有 幾行了,而且每個程序都是一樣的,所以MFC就將WinMain函數封裝起來了,因此我們在MFC的工程里找不到WinMain函數。
WinMain函數不需要自己寫了,同時Run函數在所有程序中也是一樣的,只要基類實現了,其子類可以自動繼承,也就是說一般的程序設計我們僅僅需要實 現InitInstance函數,這也是MFC程序的入口點。
以上只是一個代碼游戲,不過可以很好的說明MFC類庫的封裝思想,要想 熟練使用MFC編程,還需要更深入的了解MFC。
總結
以上是生活随笔為你收集整理的1.5 MFC封装思想的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.4 消息循环和回调函数
- 下一篇: 1.6 网络编程之 UDP通信