?如何在Activex控件中实现浮动的窗口,工具栏,使浮动工具栏可以停靠在调用该控件框架窗口(hhool)急!!!!!!!!!!!
描述:
?如何在Activex控件中实现浮动的窗口,工具栏,使浮动工具栏可以停靠在调用该控件框架窗口(hhool)
解决方案1:
楼主的愿望不可能实现,因为这需要控件框架窗口的配合,比如控件框架窗口是个Dialog(虽然也可以),甚至是个SysListView32窗口,都不会简单地就允许楼主在客户的框架窗口停靠工具栏。还有实际的Windows提供的标准工具条是不能浮动的,而一般的MFC编写的工具条可以浮动,那是MFC专门编了一个无模式对话框,然后标准工具条停靠在那个无模式对话框上,表现地好象能够浮动。并且标准工具条也不能拖动,之所以MFC编的能那样也是MFC实现了一个停靠窗口,而标准工具条是在那个停靠窗口内MoveWindow而已。
对于MFC实现的OLE服务器在OLE容器内本地激活时工具条的浮动效果,其实比较荒谬。OLE服务器其实自己创建了一个框架窗口,然后将真正的容器窗口(也就相当于控件框架窗口)隐藏起来,然后改装自己使得用户产生在容器窗口内嵌入了服务器窗口。由于看见的框架窗口实际上是服务器自己创建的,因此当然可以具有浮动工具条的效果。
对于楼主的要求,也可以和上面一样,自己创建一个从CFrameWnd派生的窗口包装类的实例,然后隐藏控件框架窗口,用自己的实例代替它,然后让控件自己的工具条停靠在那个CFrameWnd的窗口上(停靠方法就和平时正常使用时一样)。
不过这其实是有问题的。OLE之所以能替换容器窗口,是因为当替换时,理论上整个窗口就只能有OLE服务器在工作(即本地激活嵌入对象,楼主可以随便找个容器程序,如Word,嵌入个excel对象,当本地激活时只有excel能工作)。但是ActiveX控件就不一样了,同时其他的控件也是可以活动的,这样ActiveX控件创建的框架窗口就不能模拟控件框架窗口的执行了,但应该有个事件标志,比如本地激活、ActiveX控件获得输入焦点等,当事件发生时才替换,就如ole一样,不过界面就看不过去了(老是要闪烁几下),而且还需要控件框架支持这个事件。
因此,除非楼主的控件和控件框架都自己编写,不然是很难实现楼主的效果的(即使实现也是个别例子,不能在任意控件框架下使用,因为ActiveX协议并未为这一点提供任何保证)。