我使用从HwndHost派生的类来托管Win32窗口。它又在用户控件中使用。除非成功创建内部Win32窗口,否则不会显示该用户控件(可见性)。但是,除非HwndHost窗口可见,否则看起来似乎没有调用BuildWindowCore方法,所以我有一个鸡肉和鸡肉。蛋情况。
如果HwndHost派生类不可见,是否有另一种方法可以获得它的BuildWindowCore方法?
答案 0 :(得分:0)
嗯,一个月过去了没有答案。看起来我已经把包括我自己在内的所有人都难倒了。
因此,从.NET 4.0开始的答案是“不,在框架准备好调用它之前,没有办法强制调用BuildWindowCore。”
答案 1 :(得分:0)
您可以自己创建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);
}
};