SetParent COM和WPF

时间:2009-07-15 11:36:06

标签: wpf winapi setparent

我有两个屏幕。一个在vb中创建,第二个在WPF中。

我必须将vb嵌入到wpf中。

因此,我有一个想法,首先创建一个新的Windows窗体的表单,并使用win32 API函数“SetParent”,以便在Windows窗体中嵌入vb屏幕。 其次,使用wpf WindowsFormsHost控件在wpf表单中托管winform。

在一个单独的测试应用程序中,一切都很顺利。 但是当我试图在完整的大型wpf应用程序中执行此操作时,winform将被加载为空,并且vb屏幕闪烁然后立即消失。

是否有一些可行的解决方案???

请帮忙......真的很匆忙。

感谢。

P.S:如果有人有更好的方法在wpf中嵌入vb6 ...我想听听它。

内里亚

3 个答案:

答案 0 :(得分:1)

是否可以将VB6屏幕公开为ActiveX控件?如果是这样,添加导入ActiveX控件,然后将其添加到WindowsFormsHost的实例可能会更清晰。然后,您可以将WindowsFormsHost视为普通的WPF控件,并将其添加到WPF应用程序中。

答案 1 :(得分:0)

必须添加: WindowsFormsHost?.Child = New System.Windows.Forms.Control 在使用SetParent传递hWnd

之前

答案 2 :(得分:0)

你是否以编程方式启动vb app?如果是这样,您需要等到进程加载并为vb窗口创建正确的窗口句柄。

首先要初始化WPF窗口,然后尝试嵌入其他窗口。

您是否为孩子(vb窗口)设置了正确的大小?

如果要查找窗口的句柄,请使用FindWindow / FindWindowEx或WindowEnum。如果你想将FindWindow用于具有动态标题的窗口,你应该搜索类名(希望只有一个窗口)。

您是否为孩子设置了样式WS_Child和~WS_Popup?