Принудительно вызвать член BuildWindowCore производного класса HwndHost
Я использую класс, полученный из HwndHost для размещения окна Win32. Это в свою очередь используется в пользовательском элементе управления. Этот пользовательский элемент управления не отображается (видимость), пока не будет успешно создано внутреннее окно Win32. Тем не менее, метод BuildWindowCore, по-видимому, не вызывается, если окно HwndHost не видно, поэтому у меня ситуация с курицей и яйцом.
Если производный класс HwndHost не виден, есть ли другой способ вызвать его метод BuildWindowCore?
2 ответа
Ну, месяц прошел без ответов. Похоже, я поставил в тупик всех, включая себя.
Итак, ответ на.NET 4.0: "Нет, нет способа заставить BuildWindowCore вызываться до того, как инфраструктура будет готова к его вызову".
Вы можете создать свое окно 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);
}
};