作者:朱金灿
来源:http://blog.csdn.net/clever101
有关VC编程中DLL封装对话框的资料网上多如牛毛,现在我想探究一下如何在DLL中封装框架窗口、文档和视图,略有所得,与诸君共享。我找到了两种DLL封装框架视图的方式。实际上用DLL封装框架视图涉及到两点:一是如何封装;二是确保窗口销毁之后的不出现内存泄露。(下面所有代码的开发环境为:VS C++ 2005+sp1, Win XP + sp2)
方式一 动态创建窗口
请不要误会,我不是指用C语言开发SDK的方式动态创建窗口的方式,当然这样是完全可以的,问题是这种太过于方式太过于复杂。微软已经封装好了MFC,我们没必要不领微软的情。我采用的是一种API和MFC结合的方式。我们把调用DLL模块的程序叫宿主程序,把封装窗体的DLL叫客户程序。
首先我们建一个使用共享MFC的规则DLL工程Custom1。我的基本想法是这样的:定义三个类:
类名
|
描述
|
备注
|
CCustomManage1
|
对外接口类,该类负责动态窗口的创建和销毁。
|
|
CCustomFrameWnd1
|
派生自CFrameWnd,为动态创建的框架窗口类。
|
|
CCustomView1
|
派生自CView,为动态创建的视图类。
|
|
大致的设计是这样的:在CCustomManage1类定义一个CCustomFrameWnd1类的指针,在CCustomFrameWnd1类定义一个CCustomView1类的指针。
主要创建代码如下:
为了防止内存泄露,我们需要考虑防止如何销毁窗口。为了更好地说明这个问题,我先建一个调用该DLL的单文档工程Ower来说明这个问题。现在Ower工程的框架类CMainFrame类定义一个CCustomManage1类的私有变量:
然后新建一个菜单项,在菜单项的命令响应函数里弹出新建窗口,具体代码如下:
这时我们需要考虑用户是怎么关闭新建窗口,用户就是要么是单击调用程序的关闭按钮把两个窗口都关闭;要么单击DLL弹出的新建窗口的关闭按钮。那么在实现CCustomManage1类的DestroyFrameWnd函数里需要考虑这一点,防止用户先关闭新建窗口,再关闭调用程序时出错,就是要确保关闭时窗口句柄是有效的。
效果图如下:
当然你还可以测试在DLL的新建窗口的是否可以加载工具栏,响应Windows的标准消息。我测试过是可以的。
分享到:
相关推荐
DLL封装框架视图的示例代码,方式一 动态创建窗口,方式二 新建文档模板
多文档框架视图封装在dll中,有利于系统的模块化开发,非“dll封装多文档框架视图的例子”,无BUG
DLL接口封装三层数据库,三层数据库代码 还不错 可以拿来学习 希望对大家有用-Three databases can be used to learn the code is not bad
c# dll封装以及调用
将dll封装成ocx说明文档, 将dll封装成ocx说明文档
dll文件封装成OCX控件,当然其中也有对dll的调用,其实是c++制作OCX的文档
将文档视图类封装成dll文件,附C++实例,可在VC下运行
用VB生成DLL封装ASP代码_连接数据库,调用站点外部的数据
DLL插件的完整代码和EXE,借鉴了咏南工作室的Delphi插件框架(在此表示感谢),本人加入了MDI窗体实现功能,DLL窗体之间通讯的功能,DLL窗体和主框的通讯功能。希望对大家有所帮助
DLL封装Excel的读写功能,上次传错了,不好意思!里面有调用的例子
DLL封装Excel的读写功能VC++6.0源码
在软件开发设计中,为了更好的封装代码,实现代码版权的保护等等,很多需要将代码封装成DLL文件。
反编译dll源代码,查看dll封装的代码
用接口实现了DLL封装对象,包括DLL文件本身与它的调用;在delphi7中调试通过;
delphi dll hook框架 用于注入游戏
dll封装MFC对话框资源,博客中的源码工程。可以参看dll的资源封装以及使用。
主要讲解lib 和 dll在C++项目中的封装和使用..对初学者有点帮助。。。
一个使用dll中的文档视图类的例子: 将文档视图类封装到dll中,由应用程序调用. 程序内容: 1.dll源代码; 2.demo程序代码.
C#调用dll封装的对话框实例 C#调用dll封装的对话框实例 C#调用dll封装的对话框实例 C#调用dll封装的对话框实例 C#调用dll封装的对话框实例 C#调用dll封装的对话框实例
WPF封装成DLL方法