转载自:
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中调用。