强制调用HwndHost派生类的BuildWindowCore成员

时间:2011-02-07 16:58:36

标签: wpf visibility hwndhost

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

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

2 个答案:

答案 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);
  }
};