Принудительно вызвать член BuildWindowCore производного класса HwndHost - PullRequest
1 голос
/ 07 февраля 2011

Я использую класс, производный от HwndHost, для размещения окна Win32. Это в свою очередь используется в пользовательском элементе управления. Этот пользовательский элемент управления не отображается (видимость), пока не будет успешно создано внутреннее окно Win32. Однако метод BuildWindowCore, по-видимому, не вызывается, если окно HwndHost не видно, поэтому у меня ситуация с курицей и яйцом.

Если производный класс HwndHost не виден, есть ли другой способ вызвать его метод BuildWindowCore?

Ответы [ 2 ]

0 голосов
/ 30 июня 2011

Вы можете создать свое окно 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);
  }
};
0 голосов
/ 24 марта 2011

Ну, месяц прошел без ответов.Похоже, я поставил в тупик всех, в том числе и себя.

Итак, начиная с .NET 4.0 ответ: «Нет, нет способа заставить вызов BuildWindowCore до того, как фреймворк будет готов вызвать его».

...