日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1.5 MFC封装思想

發(fā)布時(shí)間:2024/4/11 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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。

總結(jié)

以上是生活随笔為你收集整理的1.5 MFC封装思想的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。