ActiveX初始化:AxHost.State对象
我正在尝试使用WinFormsHost-Control将Unity3D-ActiveX控件嵌入到WPF表单中。
实际上它在VS的属性窗口中设置路径时效果很好,但是在我的代码文件中设置它时它不会加载任何东西。 这是一个已知的控件问题,但我想我可以简单地复制表单设计器的创建代码并手动初始化它。
在查看初始化代码时,我注意到代码中没有src
属性,但属性在属性窗口中使用。 手动设置属性不起作用(抛出错误)。
经过一些测试之后,我决定检查src
属性的孔组件,但是src
属性从未设置过,我甚至找不到路径的字符串。
最后的想法
我注意到src-path所在的位置只有一个:窗口表单设计器生成的资源,它是AxHost.State -type的一个对象。
题
如何创建一个有效的AxHost.State
对象来初始化应该加载我指定的Unity3D文件的Unity3D-ActiveX控件?
这个解决方案有效但速度有点慢(注意:您需要在Forms Designer中初始化Control一次并将OcxState对象复制到程序集资源中):
// Create a ocx state object with the correct path _Unity = new AxUnityWebPlayerAXLib.AxUnityWebPlayer(); ((System.ComponentModel.ISupportInitialize)(_Unity)).BeginInit(); _Unity.OcxState = (AxHost.State)(Resources.Unity3DOcx); _Unity.TabIndex = 0; Controls.Add(_Unity); ((System.ComponentModel.ISupportInitialize)(_Unity)).EndInit(); _Unity.src = _File; AxHost.State state = _Unity.OcxState; _Unity.Dispose(); // Create the unity web player object _Unity = new AxUnityWebPlayerAXLib.AxUnityWebPlayer(); ((System.ComponentModel.ISupportInitialize)(_Unity)).BeginInit(); this.SuspendLayout(); _Unity.Dock = DockStyle.Fill; _Unity.Name = "Unity"; _Unity.OcxState = state; _Unity.TabIndex = 0; Controls.Add(_Unity); ((System.ComponentModel.ISupportInitialize)(_Unity)).EndInit(); this.ResumeLayout(false);
如果要在ActiveX Unity Web播放器中将参数设置为disableContextMenu属性,则需要在程序中准备IPropertyBag.Read方法。
我制作了一个示例C ++程序(Visual Studio 2010),它将“true”参数设置为disableContextMenu属性。 请参阅http://www.nibiirosoft.com/download/UnityActiveXSample.zip
使用该代码,我为.unity3d文件制作了一个播放器( http://www.nibiirosoft.com/Product/UniPlayer.html )。
我希望它对你有所帮助。
反编译dll“ AxUnityWebPlayerAXLib
”并直接在代码中添加src
参数解决了问题。
一切正常,但我仍然遇到“ disableContextMenu
”的问题。