您的位置:首页 > 其它

1.5 MFC封装思想

2015-08-26 17:19 295 查看
**************************************************

*  本文由小鸟飞飞整理发表 <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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: