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