【转载】MiniUtilityFramework(四):CDominatorBase
转载自:http://blog.csdn.net/norains/article/details/3956982
CDominatorBase是MUF中唯一必须要继承的类。因为该类有两个纯虚函数,如果需要实例化,就必须要继承重载。
我们来看看这两个纯虚函数:
//----------------------------------------------------------------------------------
//Description:
// Create the new window object. You should call the CloseWndObj to release the resource
//Parameters:
// strWndName : [in] The window name
//-----------------------------------------------------------------------------------
virtual CUserWnd* CreateWndObj(const TSTRING &strWndName) = 0;
//----------------------------------------------------------------------------------
//Description:
// Close the object of the window.
//Parameter:
// pObject : [in] The handle of the window which returned by CreateWndObj function.
//-----------------------------------------------------------------------------------
virtual BOOL CloseWndObj(CUserWnd* pObject) = 0;
设置这两个纯虚函数的原因是给使用者提供一个创建窗口的接口,令其能实现特有的功能。
当然,如果为了简便,可以直接在CreateWndObj中直接返回CUserWnd的实例:
CUserWnd *pObj = new CUserWnd(GetImgTab(),GetStrTab());
return pObj;
不过这样就只能是有限的几个功能,基本上无法满足用户的需求。
如果客户想创建自己独有功能的窗口,必须继承于CUserWnd,然后在CreateWndObj创建相应的实例。
例如:
class CSettingWnd: public CUserWnd { public: CSettingWnd(); virtual ~CSettingWnd(); ... } class CVideoWnd: public CUserWnd { public: CVideoWnd(); virtual ~CVideoWnd(); ... } class CDominator: public CDominatorBase { public: virtual CUserWnd* CreateWndObj(const TSTRING &strWndName); virtual BOOL CloseWndObj(CUserWnd* pObject) ; ... } CUserWnd* CDominator::CreateWndObj(const TSTRING &strWndName) { CUserWnd *pObj = NULL; if(strWndName == TEXT("WND_VIDEO")) //WND_VIDEO是在配置文件中定义的 { pObj = new CVideoWnd(GetImgTab(),GetStrTab()); } else if(strWndName == TEXT("WND_SETTING")) //WND_SETTING是在配置文件中定义的 { pObj = new CSettingWnd(GetImgTab(),GetStrTab()); } else { pObj = CDominatorBase::CreateWndObj(GetImgTab(),GetStrTab()); } return pObj;
代码中的窗口名是在配置文件中定义的,例如:
[WND_VIDEO]
TYPE=WINDOW
...
[WND_SETTING]
TYPE=WINDOW
...
夹杂在[]中的SECTION即为代码中的窗口名。
CDominatorBase中还有两个public函数,分别如下:
//-----------------------------------------
//Description:
// Initialize
//Parameter:
// strIniFile : [in] The ini file path
//-----------------------------------------
virtual BOOL Initialize(const TSTRING &strIniFile);
//-----------------------------------------
//Description:
// Show the main window
//Parameters:
// bShow : [in] TRUE - show window. FALSE - hide.
//-----------------------------------------
virtual BOOL ShowMainWnd(BOOL bShow);
Initialize函数的形参是配置文件的路径,如:
CDominator dom;
dom.Initialize(TEXT("//NDND//MUF.ini"));
ShowMainWnd用来决定主窗口是显示还是隐藏。“主窗口”指的的是在配置文件中段名为WND_MAIN的窗口,即:
[WND_MAIN]
TYPE=WINDOW
以上两个函数一般都是在程序入口函数WinMain中调用。