zoukankan      html  css  js  c++  java
  • DLL封装框架视图经验总结

    作者:朱金灿

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

     

     

        有关VC编程中DLL封装对话框的资料网上多如牛毛,现在我想探究一下如何在DLL中封装框架窗口、文档和视图,略有所得,与诸君共享。我找到了两种DLL封装框架视图的方式。实际上用DLL封装框架视图涉及到两点:一是如何封装;二是确保窗口销毁之后的不出现内存泄露。(下面所有代码的开发环境为:VS C++ 2005+sp1, Win XP + sp2

     

    方式一 动态创建窗口

     

         请不要误会,我不是指用C语言开发SDK的方式动态创建窗口的方式,当然这样是完全可以的,问题是这种太过于方式太过于复杂。微软已经封装好了MFC,我们没必要不领微软的情。我采用的是一种APIMFC结合的方式。我们把调用DLL模块的程序叫宿主程序,把封装窗体的DLL叫客户程序。

     

    首先我们建一个使用共享MFC的规则DLL工程Custom1。我的基本想法是这样的:定义三个类:

    类名

    描述

    备注

    CCustomManage1

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

     

    CCustomFrameWnd1

     

    派生自CFrameWnd,为动态创建的框架窗口类。

     

    CCustomView1

     

    派生自CView,为动态创建的视图类。

     

     

     

       

    大致的设计是这样的:在CCustomManage1类定义一个CCustomFrameWnd1类的指针,在CCustomFrameWnd1类定义一个CCustomView1类的指针。

     

    主要创建代码如下:

    为了防止内存泄露,我们需要考虑防止如何销毁窗口。为了更好地说明这个问题,我先建一个调用该DLL的单文档工程Ower来说明这个问题。现在Ower工程的框架类CMainFrame类定义一个CCustomManage1类的私有变量:

         

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

     这时我们需要考虑用户是怎么关闭新建窗口,用户就是要么是单击调用程序的关闭按钮把两个窗口都关闭;要么单击DLL弹出的新建窗口的关闭按钮。那么在实现CCustomManage1类的DestroyFrameWnd函数里需要考虑这一点,防止用户先关闭新建窗口,再关闭调用程序时出错,就是要确保关闭时窗口句柄是有效的。

         

         

    效果图如下:

    动态创建窗口图1

        

         当然你还可以测试在DLL的新建窗口的是否可以加载工具栏,响应Windows的标准消息。我测试过是可以的。

       

  • 相关阅读:
    DjangoRestFramework学习二之序列化组件、视图组件 serializer modelserializer
    DjangoRestFramework 学习之restful规范 APIview 解析器组件 Postman等
    vue学习目录 vue初识 this指向问题 vue组件传值 过滤器 钩子函数 路由 全家桶 脚手架 vuecli element-ui axios bus
    vue框架的搭建 安装vue/cli 脚手架 安装node.js 安装cnpm
    Redis集合 安装 哨兵集群 安全配置 redis持久化
    linux vue uwsgi nginx 部署路飞学城 安装 vue
    爬虫第三部分综合案例
    creating server tcp listening socket 127.0.0.1:6379: bind No error
    爬虫第二部分
    外键为什么加上索引?
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6471120.html
Copyright © 2011-2022 走看看