关于 Gallery
转自:http://blog.vckbase.com/iwaswzq/archive/2005/07/21/9873.html
-----------------------------------------------------
前言:
想在工程里面插入一个ActiveX控件,却发现我的VC找不到
任何注册的东西,深感奇怪。看了一晚上msdn中关于 Gallery
的东西,终于有所收获,不敢独享,特此贴出。
-----------------------------------------------------
说明:
Visual C++ 6 通过 Gallery 实现代码重用。你可以在自己的工程中从这里
添加很多东西,从而增强自己程序的功能,比如图像控件、图表控件等等。
Gallery里面的控件被分成两类:
1、Visual C++ Components
2、Registered ActiveX Controls
以及其它用户自己产生的控件类和第三方的控件或者组件。
*****************************************************
一、访问 Gallery
在“工程”菜单,选择“ Add To Project”,然后点“Components and Controls”命令,则vc打开 Gallery 对话框,和打开文件对话框一样。
Gallery 目录里面缺省包含两个子目录,一个是“Visual C++ Components”,一个是“Registered ActiveX Controls”,另外其它的目录都是用户自己的控件目录。
这个 Gallery 目录一般位于Visual C++软件目录下面的MSDEV98子目录里面。对于这些个目录有如下
说明:
(1)、不允许移动或者改名。如果你这么做了,这些目录会自动创建新的。
(2)、里面包含的仅仅是各种控件的快捷方式和注册信息。
(3)、不要用来保存其它文件。
*****************************************************
二、关于两个子目录
Visual C++ Components 目录包含了系统中注册的Visual C++ 组件(.DLL files)的快捷方式。Registered ActiveX Controls 目录包含的是所有在系统中注册的ActiveX控件(包括.OCX或者.DLL)的link。
这些组件要么是安装VC的时候自动注册到系统中的,要么是后来运行某些程序的时候注册的。
每次打开 Gallery 目录,它都会根据当前注册表的内容,重新产生所有注册组件的链接。也就是说:
1、如果你在这个目录里面删除了指向某个注册组件的link,则下次打开 Gallery的时候,这个link会再次出现。
2、如果你删除了一个注册组件,但是没有unregister它,则 Gallery中仍然有指向它的link。但是这个link不能用了。
3、如果你复制了一个组件在你的计算机上,但是没有注册,则它的link不会出现在 Gallery 里面。
*****************************************************
三、向工程中添加 Gallery 中的组件
使用 Gallery,可以很方便的向工程中添加组件或者 ActiveX 控件。或者重用以前的代码。只需选中要添加的东西,然后单击"Insert"按钮。
添加的具体效果取决于你选中什么。例如,如果你选择的是一个用户自定义组件(OGX),则会在你的工程里面添加头文件和CPP文件以及相应的资源。
假如你选择插入的是一个 ActiveX控件,则Gallery会生成一个叫做ActiveX control wrapper的编程接口,控件通过这个接口和你的程序进行通讯。这个接口包括一个头文件和一个cpp文件。
一般来说,每个 Gallery 目录中的控件都有帮助,你可以选择一个,然后点"More Info"按钮查看。其它第三方的控件一般也有自己的文档可以参考。
注意,下列工程中无法从 Gallery 中添加 ActiveX控件:
1、不使用MFC的ATL工程;
2、Win32 工程;
3、其它任何没有clw 文件的工程。
这些类型的工程中如果需要使用某个 ActiveX 控件,可以从对话框编辑器的右键菜单中选择“Insert ActiveX Control”,然后从打开的对话框中选择你需要的控件。如果该对话框是基于mfc的,则wizards会支持它,但是控件本身不会出现在那个controls资源工具条上面。因为我的VC的 Gallery 里面没有任何东西,所以我用这个方法在我的对话框上面加上了ActiveX控件,但是可惜的是没有添加任何头文件和cpp文件,因此看不到这个控件的源代码,感到愤愤不平。
下面是向工程中添加注册 ActiveX 控件的步骤:
1、打开工程的工作空间
2、如果该工作空间中有多个工程,请在“工程”菜单中选择“设置活动工程”命令。
3、在“工程”菜单,选择“添加工程”,然后选择"Components and Controls" 。
4、在 Gallery 中打开Registered ActiveX Controls 文件夹,选择你所需的控件。然后点“Insert”按钮。
5、出现请求确认对话框,确认即可。
添加组件的步骤如下:
1,2,3同上面。
4、在 Gallery 中打开 Visual C++ Components 文件夹,然后选择你需要的组件。然后点“Insert”。
5、然后一般会出现一个提示框,让你设置特定组件的属性和选项,有些组件是不需要任何设置信息的。
6、点 OK以后,Gallery会把组件中包含的文件和资源复制到当前的活动工程中。对于有些组件仅仅是修改你的工程文件和资源,而不会添加任何文件。你可以使用 ClassView 查看新加入的组件类,或者到ResourceView中查看新加入的资源。
*****************************************************
四、向 Gallery 中添加东西
你可以通过Gallery 搜集整理自己的重用代码。这一点很有用途,各位看官切记。
可以把自己工程中的某个vc++类转换成组件保存到Gallery中。 Gallery会自动创建一个组件(OGX)打包你的类,包括所有相关的文件和资源。你在也不需要使用剪切/复制的方法了,同时再也不用担心名字冲突了,因为 Gallery 会自动处理所有命名问题。
注意不要把ATL 类添加到 Gallery中。对于 ATL类,可能显示添加成功,但是实际上它们包含的某些东西无法保存到 Gallery中,所以以后使用的时候会产生问题。
添加类的步骤如下:
1、打开包含目标类的工程,如果里面有多个project,注意设置活动工程。
2、在 ClassView 中鼠标右击目标类,然后选择 "Add to Gallery"菜单命令。
然后在 Gallery 中就会创建一个新的文件夹,名字就是当前工程的名字,你打开它就可以看到里面有一个OGX组件。其它的工程就可以使用它了。多方便啊!
在 Gallery中,你可以重命名、删除或者复制OGX组件,只需用鼠标右键单击它们,然后选择相应命令即可。
不过需要注意的是,最好不要把OGX组件移动到那两个缺省 Gallery目录中。
如果要添加第三方组件或者ActiveX控件到 Gallery 中,需要运行该控件的安装程序,安装程序所做的工作一般包括:下载控件,注册,在Registered ActiveX Controls 文件夹中添加快捷方式等。但是并不是所有控件都有安装程序,如果没有的话,就无法添加到 Gallery中了。
我上面说到的那个问题,虽然控件成功地注册到系统中,但是 Gallery 中找不到它。用鼠标右键的方法加入工程中又不好用,幸运的是我下载了一个示例工程,里面用到了这个控件,所以里面也有这个控件的一个类(h和cpp),我采用上面所说的保存类的方法,在 Gallery中保存了一个OGX组件,这样一来,其它工程就可以使用了,很是方便,哈哈。
有些时候注册组件是通过 Regsvr32.exe ,有些情况下是通过inf文件安装的。
*****************************************************
五、管理 Gallery里面的东西
Gallery最初把组件分成两组,放在两个缺省子文件夹中,你可以按照自己的喜好组织和管理里面的组件。例如创建新的文件夹保存新的组件,可以删除、重命名或者重组你自己创建的文件夹。
当你创建了自己的某个文件夹以后,你可以在资源管理器中,把两个缺省文件夹里面的组件拖动到你的文件夹中。因为都是快捷方式,所以下次启动 Gallery,缺省目录里面的link会自动恢复。而你的文件夹里面已经有link了。
这些操作都很简单,就不说了。需要注意的是如果要删除Gallery里面的组件,需要先使用
Regsvr32.exe /u
命令卸载组件,然后从Gallery中删除。
虽然你可以删除两个缺省子文件夹,但是下次启动Visual C++,它们又会出现。而且里面的快捷方式(link)也会恢复。但是切记,如果删除了 Gallery 目录,则下次启动Visual C++后,虽然 Gallery 目录恢复,但是里面就空了。
六、补充
自己刚刚试了很多版本,Gallery都是空的,现在知道是跟系统有关,XP系统一点问题都没有,可是在win7说不定会出现什么问题呢。
从同学那里复制了整个MSDev98目录,替换了自己原来的,并以管理员身份运行,发现在“工程”菜单,选择“添加工程”,然后选择"Components and Controls" ,能找到东西,可是插入时,会出现"Pop-up不支持此接口"的提示:
Pop-up Menu 不支持此接口,原因是我用的Win7的系统,这就是关键。