我目前在 WPF 中托管一个 Win32 OSG(基于 OpenGL 构建)控件。我正在使用 Telerik 对接库。当窗格与 MainWindow 对接时,一切正常。但是,当我撕下标签时,OSG 图形不会在撕下标签中重新创建。
我是用于创建本机 Win32 主机并返回本机句柄的子类HwndHost
化CreateWindowEx
(请参见下面的代码)。然后我将该句柄传递给由用户控件托管的本机 OSG 代码。
// inside my ControlHost class which derives from HwndHost
protected override HandleRef BuildWindowCore(HandleRef hwndParent)
{
hwndControl = IntPtr.Zero;
hwndHost = IntPtr.Zero;
hwndHost = CreateWindowEx(0, "MDIClient", "",
WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN,
0, 0,
hostHeight, hostWidth,
hwndParent.Handle,
(IntPtr)HOST_ID,
IntPtr.Zero,
0);
return new HandleRef(this, hwndHost);
}
When debugging into the above method, as expected, the hwndParent.handle
parameter is the handle of the WPF MainWindow when the tab is docked in the Main window. 但是,当我将选项卡拉出并变成浮动选项卡时,该hwndParent.handle
属性是我无法使用 Spy++ 找到的值。根据 Spy++ 的浮动标签“hwnd”值与上述方法产生的值相同。我怀疑这可能是 OSG 图形不显示的原因。
我的问题是:
我知道 WPF 本身只有一个与每个 Window 对象关联的 HWND,但是这如何与停靠库中的浮动面板一起使用?浮动面板实际上是作为基础对象的窗口还是用户控件?
任何想法为什么我的原生 OSG 图形没有显示在浮动撕下选项卡上?它与传入的父句柄有关吗?