dedecms织梦内容管理系统    
首页 | java | C/C++ | PHP | 操作系统 | ajax | 脚本编程 | 安全技术 | 本站下载页 | flex | CRM | 专题 | QQ群 | 测试中心 | 会员中心 | 积分规则
  当前位置:主页>C/C++>C/C++技术资料>文章内容
利用模板技术简化VC中的代码
来源:电脑报     作者:    
  程序设计的两个重要方面:代码重用和接口设计,C++一直是公认在这两方面做得最为出色的语言之一。而良好的接口则是代码重用的坚实基础。包含多个层面,大体分为代码层面、模块层面、COM层面和应用系统层面。

  认识VC中的模板

  许多初学VC的程序员总感觉VC的代码繁锁,不如、、C++Builder那样简单直观。其实在VC中只要灵活地使用C++的设计手段:多态性、模板、类封装来实现代码重用,便能使代码大大简化和直观。对于多态性和类封装相信许多学习者已比较熟悉了,但对于模板进行接口简化却很少应用。这里就为大家说一下应用模板来简化代码层面设计实现代码重用。

  模板类对于初学者都比较难以理解的。很多时候,一提到模板,就会想起Clist、Carray等。但实际上模板技术的运用远不止如此。下面举例为大家说明一下使用模板技术来简化程序的代码。

  从实例学做模板

  这里我们想以一个实现以动画风格显示出的对话框为例,探讨代码重用的技巧。为此向大家介绍一个CWnd 的函数:AnimateWindow(DWORD dwtime,DWORD dwflags),该能以动画方式显示出窗口,第一个参数为动画效果持续时间,第二个则是动画的方式。具体详细说明可查看VC帮助文档。

  对此,我们可以在对话框类的初始化操作中加入动画显示过程。例如:在CMyAnimateDlg的OnInitDialog中加入下面一句代码:

this->AnimateWindow 1000AW_CENTER

  具体动画方式可通过改变该的参数,即可实现动画显示效果。

  以上办法看似方便,直观。但若程序中有多个不同的对话框,要做到界面风格的统一,则要使每个对话框都具有此动画效果,又由于涉及到不同的资源及操作,必定不可能简单地从CMyAnimateDlg派生,那是否必须改写每个对话框类的OnInitDialog。若只是像我们上述的一句操作即可完成的功能倒还容易,但若有另外更多的特殊风格,例如为每个对话框都添加一个状态栏,工具栏等等,那么重复繁锁的代码该如何避免呢?
其实利用模板技术即可方便地解决这类问题。

  首先,我们将CMyAnimatDlg抽象成一个模板。


Template <class T>
Class CMyAnimateDlg  public T

public
CMyAnimateDlgCWnd pParent=NULL
Protected
Virtual BOOL OnInitDialog

template <class T>
CMyAnimateDlg<T>CMyAnimateDlgCWnd pParent TpParent

template <class T>
BOOL CMyAnimateDlg<T>OnInitDialog

TOnInitDialog
this->AnimateWindow1000AW_CENTER
return TRUE

  这样在使用对话框时,只需要将原来声明对象时的对话框,类名改为:CMyAnimateDlg<对话框类名>, 即可使声明的对话框对象具有动画显示效果。

  例如:原来程序中的About对话框想具有动画显示的效果只需要将原来声明
CAboutDlg DlgAbout

  改为:CMyAnimateDlg<CAboutDlg> DlgAbout

  若想为对话框添加状态栏,只需要在CMyAnimateDlg中添加成员变量:CstatusBarCtrl m_wndStatusBar。再在CMyAnimateDlg<T>OnInitDialog中加入对m_wndStatusBar的创建和初始化操作即可。

  相对应地,以后所有对话框类利用此模板声明的对话框就都具有你所自定义的状态栏。而且可以通过m_wndStatusBar访问和修改。以后若想再添加工具栏,只须使用相同的方法即可添加状态栏和工具栏的代码在此就不予列出。这样一来就简化了设计,充分体现了代码重用。

  以上只是模板技术在简化程序代码方面的一点应用,但其功能远不止如此。这里只是为大家带来一些提示,希望能有所启发。

  (注:以上代码在VC7、Win2000中调试通过)

 

 

上一篇:如何自动截获输出到打印机的文本数据   下一篇:用Sockets接收和转换数字和字符串数据
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·C语言数组排序小结
·Python 与 C++ 程序的简单实例对
·c++ 数组与指针
·C++中的内存管理(new、delete、
·如何用C语言开发DSP嵌入式系统
·如何用C语言开发DSP嵌入式系统
·Linux下C语言编程
·学习arm的话先看哪本书?
·C++初学者应该关心的优秀图书一
·利用C语言小程序来解决大问题
·用C语言写PHP扩展的步骤
·用C语言扩展PHP功能
  相关文章
·如何自动截获输出到打印机的文本
·用Sockets接收和转换数字和字符
·如何用VC++和Visual Foxpro进行A
·用VC存取数据库中的大对象
·如何获取某个进程的主窗口以及创
·VC编程实现文本语音转换
·如何编写控制面板程序
·利用WebBrowser控件创建自己的浏
·在MFC扩展DLL中输出对话框
·Windows下实时行式打印系统设计
·改造MFC编写的控件在Win32ASM中
·VC下打印机的使用
  相关信息
copy right @ 百家拳软件项目研究室 2007 辽ICP备07011763