专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 编程

WTL学习之创办单文档程序的主要界面元素

发布时间:2011-07-01 07:30:43 文章来源:www.iduyao.cn 采编人员:星星草
WTL学习之创建单文档程序的主要界面元素

作者:朱金灿

来源:http://blog.csdn.net/clever101

 

      WTL的安装程序提供了提供了一个类似的MFC的应用程序向导,开发环境为Win XP + sp3,VS 2005+ sp1,WTL8.0。今天就让我们使用这个向导学习一下如何使用WTL创建一个单文档程序。

 

1. 选择WTL程序项目,输入项目名,如下图:


2. 使用如下设置生成项目,如下面图:

让我们编译一下程序,看看程序的效果图:

   

        是不是和MFC的单文档程序的效果差不多呢?让我们看看生成哪些类及重要的代码。先看看主函数吧:

CAppModule _Module可以看做是MFC程序的应用程序类对象,起着初始化和建立消息循环的作用。我们再分析下WinMain函数做了哪些工作:

  1. ::CoInitialize(NULL); —— 初始化COM环境
  2. ::DefWindowProc(NULL, 0, 0, 0L); ——貌似是解决在使用微软的unicode层时ATL窗口的thunking的问题,看不明白,暂且放过。
  3. AtlInitCommonControls —— 支持ATL的其它控件的特殊属性。
  4. _Module.Init —— 应用程序初始化
  5. 调用Run函数,Run函数的主要作用是创建主框架窗口,进入消息循环。
  6. _Module.Term(); —— 销毁应用程序
  7. ::CoUninitialize();—— COM环境销毁。

 

我们再看看主框架窗口类——CMainFrame。这个类的作用类似于MFC程序的CMainFrame类,不过其类结构和MFC程序的CMainFrame类有很大不同。CMainFrame类主要派生自四个类:CFrameWindowImpl、CUpdateUI、CMessageFilter和CIdleHandler。从名字上我们可以猜得出CFrameWindowImpl是窗口基类、CUpdateUI负责界面更新、CMessageFilter负责消息截取,CIdleHandler负责空闲处理。

 

我们再看看CMainFrame类的数据成员:

CWtlToolbarView m_view;  —— 视图窗口,相当于MFC的视图类。

 

CCommandBarCtrl m_CmdBar; —— 菜单栏

 

CMainFrame类的创建顺序实际上是这样的:

1.     CreateSimpleReBar(ATL_SIMPLE_REBAR_NOBORDER_STYLE);——创建空的rebar风格的工具栏

 

   2.下面代码是创建菜单栏,并把它加到之前创建空的工具栏


  1. 下面代码是创建实际的工具栏,并把它加到之前创建空的工具栏:

4. 创建一个简单的状态栏,代码如下:


  1. 创建视图窗口,代码如下:

 

还有两个类:

视图类:class CWtlToolbarView : public CWindowImpl<CWtlToolbarView>

和关于对话框类:class CAboutDlg : public CDialogImpl<CAboutDlg>。因为这个类比较简单,这里就不作介绍了。

 

         比起MFC程序,你会发现WTL程序少了文档类。我觉得这倒是WTL程序设计巧妙的地方。我常常觉得MFC程序中的文档类是一个比较鸡肋的类,理由很简单:文档类主要做的是序列化方面的工作,一是没那么多程序需要序列化;二是序列化工作只是一个简单功能,你可以在视图类做,也可以在框架类做,有什么必要专门创建一个类来做这个工作?你可能觉得视图类有时也是多余的,实际上也有可能,而WTL也考虑到了,向导的最后一步允许你是否选择:Use a view window。这也是WTL库比起MFC库的优点:MFC库不管你需要不需要,一股脑给你一堆类,而WTL则是允许你自由组装和裁剪,就使用自由度WTL比MFC要好。









友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: