博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转载】MiniUtilityFramework(四):CDominatorBase
阅读量:7222 次
发布时间:2019-06-29

本文共 2862 字,大约阅读时间需要 9 分钟。

转载自:

 

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中调用。

转载于:https://www.cnblogs.com/hao507/articles/2276488.html

你可能感兴趣的文章
Xcode调试断点不停止解决方案!
查看>>
CentOS6.6+Puppet3.7.4分布式部署Nagios监控系统
查看>>
SQL Server 2008 存储结构之DCM、BCM
查看>>
asp.net2005里给控件重命名,提示“目录名无效”怎么解决
查看>>
Redis源码解析--Replication
查看>>
Java的多进程运行模式分析
查看>>
百度面试题:求绝对值最小的数
查看>>
敏捷个人手机应用:如何使用时中法目标
查看>>
Android 解决ListView 和 ScrollView 共存冲突的问题
查看>>
利用Power Designer反向数据库结构
查看>>
在ISA 2006企业版环境下配置存储服务器(CSS)
查看>>
使用Seam-gen生成基础项目骨架
查看>>
RHCE学习<13>RHCS集群(RHCS+GFS2+ISCSI)
查看>>
Java线程:线程私有变量
查看>>
[Web开发] Web 2.0 网站估价工具
查看>>
IE8 默认以Web Standards模式显示网页 全面遵循Web标准
查看>>
网站Web项目树形菜单的实现过程(ExtJS+SpringMVC+Spring+Hibernate+MySQL)
查看>>
深入浅出Attribute(中)——Attribute本质论
查看>>
Lync 小技巧-52-Lync 2013-不加域-客户端-2-导入-证书-信任链
查看>>
Drawable、Bitmap、Canvas和Paint的关系以及部分使用方法
查看>>