博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DLL封装框架视图经验总结二
阅读量:2429 次
发布时间:2019-05-10

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

 

 

作者:朱金灿

来源:

 

 

    上次我谈了DLL 封装框架视图的第一种方式动态创建窗口,下面我谈谈第二种方式新建文档模板。实际上这种方式更为简单。(下面所有代码的开发环境为:VS C++ 2005+sp1, Win XP + sp2

 

方式二 新建文档模板

 

  首先我们建一个使用共享MFC 的规则DLL 工程Custom1 。我的基本想法是这样的:定义五个类,各类描述如下:

类名

描述

备注

CCustomManage1

对外接口类, 该类负责动态窗口的创建和销毁。

 

CMySingleDocTemplate

派生自 CMySingleDocTemplate 类,为新建文档模板类。

 

CCustomDoc

派生自 CDocument ,为新建窗口对应的文档类。

 

CCustomFrameWnd2

派生自 CFrameWnd ,为新建框架窗口类。

 

CCustomView

派生自 CView ,为新建视图类。

 

 

CCustomManage1 类的定义和实现,具体代码如下:

   

 

现在说说如何外部调用。新建一个调用该DLL 的单文档工程Ower ,现在Ower 工程,在框架类 CMainFrame 类定义一个CCustomManage2 类的私有变量:

然后新建一个菜单项,在菜单项的命令响应函数里弹出新建窗口,具体代码如下:

  下面谈谈如何销毁窗口防止内存泄露。这时我们需要考虑用户是怎么关闭新建窗口,用户就是要么是单击调用程序的关闭按钮把两个窗口都关闭;要么单击DLL 弹出的新建窗口的关闭按钮。用户先关新建窗口,再关闭调用程序,这个是没有内存泄露的。但是如果用户一下关闭应用程序(就是同时关闭两个窗口),就会出现内存泄露。为此我们需要重写 CMainFrame 类的WM_CLOSE 消息:

       

这样就可以确保内存没有泄露。效果图如下:      

DLL封装框架视图经验总结二

     上面可以看作是在DLL 封装了一个单文档程序。从这个角度看,这种方式比动态新建窗口看起来更为自然一下。另外举一反三,可以封装MDI 程序,只须将上面的自定义的文档模板类派生自CMultiDocTemplate 。有兴趣的朋友可以去做一下。

 

      使用DLL 封装框架视图的意义在哪里呢?其实是可以应对更多样的需求,很多时候仅仅是对话框并不满足需求,比如图像处理软件中往往是多视图的,当然也可以在对话框绘图,但感觉不如在视图类画图方便,对话框没有大小化窗口的按钮,这也是一个缺点。在一个大系统里,使用DLL 封装框架视图可以很方便地将多个业务逻辑划分为多个模块,开发起来更为方便。

 

转载地址:http://vfimb.baihongyu.com/

你可能感兴趣的文章
jquery freemarker模板设置变量每次循环加1
查看>>
VMware虚拟机启动后出现黑屏,不能显示界面,无论安装的是ubuntu还是centos
查看>>
osi七层模型,什么是tcp/ip协议,tcp与http,UDP的区别,tcp三次握手过程和特点
查看>>
第二章,ubuntu系统的查看防火墙,切换root用户,设置固定ip、系统时间等
查看>>
hash原理总结
查看>>
mongodb的优缺点
查看>>
如何在cmd下,查找指定一个TXT文件的内容,把这个文本里包含关键字的所有行复制到一个新的文本中
查看>>
线程池和队列学习,队列在线程池中的使用,什么是队列阻塞,什么是有界队列
查看>>
复制集让mongodb的secondary支持读操作,因为存在读写延迟所以是否需要读写分离
查看>>
svn小乌龟怎么断开链接,怎么查看电脑中的隐藏文件,svn复制包或修改包名应注意什么
查看>>
DDR内存基础知识
查看>>
uboot结构之BL0、BL1、BL2、BL3区别于关系
查看>>
Linux模块传参
查看>>
文件系统
查看>>
Linux驱动之总线
查看>>
App 穷途末路?
查看>>
IoT 时代,你要么被颠覆,要么成为颠覆者!
查看>>
漫画:什么是囚徒困境?
查看>>
如何用 160 行代码,实现动态炫酷的可视化图表?
查看>>
山东到底有没有互联网?
查看>>