【转载】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中调用。

posted @ 2011-12-05 10:39  风雨雪夜  阅读(102)  评论(0编辑  收藏  举报