1

HwndHost から派生したクラスを使用して、Win32 ウィンドウをホストします。これは、ユーザー コントロール内で使用されます。内部 Win32 ウィンドウが正常に作成されない限り、そのユーザー コントロールは表示されません (可視性)。ただし、BuildWindowCore メソッドは、HwndHost ウィンドウが表示されていない限り呼び出されないように見えるため、ニワトリと卵の状況になります。

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 に答える