我使用从 HwndHost 派生的类来承载 Win32 窗口。它又在用户控件中使用。除非成功创建内部 Win32 窗口,否则不会显示该用户控件(可见性)。但是,除非 HwndHost 窗口可见,否则似乎不会调用 BuildWindowCore 方法,所以我有一个鸡和蛋的情况。
如果 HwndHost 派生类不可见,是否有另一种方法可以调用它的 BuildWindowCore 方法?
我使用从 HwndHost 派生的类来承载 Win32 窗口。它又在用户控件中使用。除非成功创建内部 Win32 窗口,否则不会显示该用户控件(可见性)。但是,除非 HwndHost 窗口可见,否则似乎不会调用 BuildWindowCore 方法,所以我有一个鸡和蛋的情况。
如果 HwndHost 派生类不可见,是否有另一种方法可以调用它的 BuildWindowCore 方法?
嗯,一个月过去了,没有答案。看来我难倒了所有人,包括我自己。
因此,.NET 4.0 的答案是“不,没有办法在框架准备好调用 BuildWindowCore 之前强制调用它。”
您可以自己创建 Win32 窗口,只需使用 HwndHost 作为包装器,如下例所示。
ref class MyHost : HwndHost
{
private:
HWND m_hWnd;
public:
MyHost(HWND hWnd)
{
m_hWnd = hWnd;
}
protected:
virtual HandleRef BuildWindowCore(HandleRef hwndParent) override
{
// Simply re-parent the window
SetParent(m_hWnd, (HWND) hwndParent.Handle.ToPointer());
return HandleRef(this, (IntPtr) m_hWnd);
}
virtual void DestroyWindowCore(HandleRef hwnd) override
{
::DestroyWindow(m_hWnd);
}
};