1

我使用从 HwndHost 派生的类来承载 Win32 窗口。它又在用户控件中使用。除非成功创建内部 Win32 窗口,否则不会显示该用户控件(可见性)。但是,除非 HwndHost 窗口可见,否则似乎不会调用 BuildWindowCore 方法,所以我有一个鸡和蛋的情况。

如果 HwndHost 派生类不可见,是否有另一种方法可以调用它的 BuildWindowCore 方法?

4

2 回答 2

0

嗯,一个月过去了,没有答案。看来我难倒了所有人,包括我自己。

因此,.NET 4.0 的答案是“不,没有办法在框架准备好调用 BuildWindowCore 之前强制调用它。”

于 2011-03-24T14:33:21.027 回答
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);
  }
};
于 2011-06-30T11:41:48.297 回答