VB外接制做
三,创建一个内部的窗体.
你也许使用过我的 CoderHelper 后,会发现,VB中多了好多窗体.怎么实现的呢.呵呵上,告诉你个小秘密,我用一个微软提供的函数,这个函数就时 VBI.Windows.CreateToolWindow,它时Windows对象的方法.
创建当然建议也时在 OnConnection 里.
Dim aitmp As AddIn'定义一个Addin
Set VBI = Application
Set MVBI = VBI
Set aitmp = MVBI.Addins("CoderHelper.Connect")
然后在模块中PUblic winCmdLine as Window
添加一个用户文档.ContinuousScroll 属性为False .命名为 ucCmdLine
在模块中 Public docCmdLine as ucCmdLine
这样时为了方便你在整个工程内使用他们.你也可以放在Connect元件中.
最后,也时最为关键的
Set winCmdLine = VBI.Windows.CreateToolWindow(aitmp, App.ProductName + ".docCmdLine", LoadResString(10), "c_m_d_l_i_n_e", docCmdLine)
aitmp参数很明显它是你Addin的实例,App.ProductName + ".docCmdLine"是ProgID.
LoadResString(10)从资源中加载了标题,当然你也可以直接写为字符串."c_m_d_l_i_n_e"是很麻烦的东西.它是GUID.GUID在MSDN和其它一些资料中说是在某目录下有这么个工具,但是似乎在VS.Net的菜单里才有.其它地方我是没有找到.在这里我是偷懒了.管它三七二十一.就用"c_m_d_l_i_n_e"代替吧,其中的"_"的也可以部要,但是MSDN带的一个示例中是这么写的.我尝试着去掉"_"但是,和这样写没什么区别.但是有一点,如果你不加"_",大家看到你代码的时候不知道那是什么参数,以为是字符串,而事实上是GUID.所以加上"_"能让你明白,那不是一般字符串.不管GUID是要干吗的.至少,现在我们是用不着的.那是它在注册表中的事情.除非你要操作它在注册表中的数据,才会用到这个该死的GUID.
docCmdLine是你刚才定义的用户文档对象.这可是必须的.不能马虎.
到这里,运行后你的VB里就会多个窗体.这个窗体本质不和其它窗体一样,它是 vbext_wt_ToolWindow类型,是不能象对象浏览器一样在窗体里对大化的.也不会有最小化和最大化按钮.它的右键菜单是无效的.我非常希望是有效的.但是,非常让我失望.
提醒你一点,创建后,你必须要 winCmdLine.Visible = Ture,才能显示出来.它的位置和大小最好不要理会.是由VB自己来控制的.用户在使用了后,关闭VB前,它是什么样的,那么下次启动时依然是什么样的.你的操心是没必要的.而且如果你的窗体和其它窗体连在一起时,调整大小可能会造成错误.有很长一段时间我试图控制它.但是非常麻烦.其实控制它的位置,目的就是关闭时的位置和下次启动位置一样.但后来才知道.这时没必要的.
关于用户文档,你可以自己创建,也可以转换一个窗体到用户文档.这里将不阐述这些事情.