对话框复用

来源:互联网 发布:全栈工程师是程序员吗 编辑:程序博客网 时间:2024/06/08 02:45

复用对程序开发来说是一个重要减少重复工作量的方法,从函数、函数库的复用,到类、类库的复用,再到设计模式、框架的复用,复用的思想和方法在其中起到至关重要的作用。

函数、函数库的复用大家都会用,最常见的常用函数被封装为C语言函数库。这些使用起来比较简单,而且大家工作以后都会慢慢积累自己的函数库。

类、类库的复用也比较简单,C++扩充的标准库STL,以及BOOST库大家基本都有用过。大家工作中也会积累自己常用的类来复用。

关于函数、函数库复用,类、类库的复用都不复杂,重在积累,后面的复用系列里会列出一个常用的函数及类复用模块,是长期开发工作的总结。但这不是本次内容重点。

对话框因其具有模板资源,在复用中大家对此都有一定的困惑,到底对话框如何才能做到完美的复用?在本次对话框复用技术中,按不同情况提供三种最为常用的对话框复用技术:

一、利用VC自带的功能进行复用。

二、利用提取资源文件进行复用。

三、利用动态创建技术复用。

下面分别介绍这几种方法:

一、VC自带的功能进行复用

适用情况:适用于不经常复用的对话框。

准备工作:少

易用程度:非常易用

步骤:

1、在开发好的原来的工程中,在calss view中在你希望导出对话框的类上点击右键,浮动菜单有‘Add  to  Gallery’选项,可以把这个类以及其资源导出为ogx文件。

2、在复用的工程中project->add  to  project->components  and  controls->具体的ogx,方式导入连同资源(如对话框等)到其他的工程中。

说明:该方法简单易用,是开发工具提供的方法,可以通过和其他人共享ogx文件复用对话框。唯一不太好的地方是对话框的资源偶尔会被弄乱。对于非常常用的对话框请不要使用这种方法。

二、利用提取资源文件进行复用。

适用情况:适用于经常复用的对话框。

准备工作:较少

易用程度:较易用

下面以一个简单的提示输入内容的编辑框为例子介绍复用步骤:

复用对话框制作:

先做一个工程,做好你需要的对话框,这里复用的是一个输入对话框。

1、创建文件夹[Input],把下面4个文件放到本文件夹下,以便复用的时候直接拷贝。

2、Input.cpp和Input.h

3、把原工程中的Input对话框中的资源拷贝出来,建立资源文件Input.rc2

4、把原工程中的Input对话框资源定义拷贝出来,建立资源文件头文件InputRc.h,注意对话框的IDD_INPUT不能和现有的冲突,而对话框资源的控件ID资源不会冲突,可以统一从9000开始。

5、在Input.h中加入

#include "InputRc.h"

复用方法:

1、把[Input]文件夹拷贝的新工程中。

2、在新工程的NewProject.rc2中加入

#include "Input//InputRc.h"

#include "Input//Input.rc2"

3, 在新工程中加入Input.cpp和Input.h文件

说明:这种方法复用起来比较简单,特别是对比较多的对话框可以一起制作,最后一次导入,复用非常好。这种方法是本人多年长期使用的方法,里面有很多技巧,上述简短的内容并没有细讲,请严格按照上述步骤操作即可。例子中是一个非常常用的应用例子,大家可以在自己的工程中很方便地应用。

三、

用动态创建技术复用。

适用情况:适用于最经常复用的对话框。

准备工作:较多

易用程度:最易用

下面以一个非常常用的进度对话框为例子介绍复用步骤:

复用对话框制作:

顾名思义,这种对话框里的所有资源都是自己编码创建的,所以工作量较大,但对最常用的对话框来说是值得的。具体的创建请参见例子代码。

复用方法:

因为这种对话框没有用到资源编辑器产生的任何RC资源,所以应用起来最简单,就像普通的类复用一样简单,直接拷贝到工程目录下,加入工程即可调用。

说明:这种方法非常灵活,不过准备工作量稍大,复用起来最简单。这个例子代码非常实用,可以用平滑、标准进度在模式及非模式方式调用。

 

我们经常会碰到这样的情形:在每个工程中独立地尝试程序的功能(这样有利于程序排错和项目分工),但是最后又不得不面对工程合并的问题。如果是功能类复用的话,很简单,只要把对应的h文件和cpp文件添加到新工程中,然后在需要引用的cpp文件中include所添加的h文件即可。但是如果是对话框复用的话,就不是那么容易了。

 

今天刚好碰到了这个问题,上网查了半天也没有答案。有人说用编辑器打开rc文件,然后把对应的对话框资源部分复制粘贴到新工程中的rc文件中,但是编译的时候却是会遇到很多ID没有定义的问题。但那些没有定义的ID不就应该算是我们在rc文件中定义的吗?这个问题就像我第一次声明一个变量,然后告诉我该变量未声明一般。所以这个方案暂时行不通,而且也不 方便,因为要手工打开rc文件,容易出错。

 

当然,我也想过在旧工程的对话框资源上“复制”,然后再在新工程的对话框资源上“粘贴”,可是却是毫无反应——复制不过来。怎么办呢?无意中网上有人说到要在新工程的解决方案中先把旧工程添加进来,然后就可以复制粘贴了。事实果然如此!

 

于是,当有已经创建好的对话框资源要添加到新工程中时:

1)右键单击新工程所在的解决方案添加“现有项目”把旧工程添加进来;

2)切换到“资源视图”并在旧工程对话框资源上右键“复制”;

3)在新工程对话框资源上右键“粘贴”;

4)现在就可以为新对话框添加类了,顺便把旧工程的响应函数拷贝过来;

5)切换回“解决方案资源管理器”,右键旧工程“移除”。

原创粉丝点击