2011-09-20 11 views
10

Pracuję nad aplikacją, która potrzebuje macierzystego okna systemu macierzystego i jakoś nie mam wskazówek, jak to zrobić.Natywne okno Win32 w sterowaniu WPF

Potrzebuję utworzyć okno dialogowe WPF, które może wyświetlić na nim rodzimy kontroler Win32. To okno dialogowe będzie również zawierało elementy sterujące WPF, więc szukam jakiejś siatki, z której mógłbym pobrać HWND i wysłać ją do niezarządzanej kontrolki C++, aby móc ją narysować. Czy to możliwe?

Nie muszę wiedzieć, co dzieje się na tej powierzchni, wystarczy, że dll C++ zacznie rysować na nim i wszystko co muszę zrobić, to przekazać HWND o odpowiednim rozmiarze (co wiem).

Jestem trochę nowych do WPF (użyty do programowania win32) i zupełnie stracił (ale teraz jak interfejs go do C# .NET itp)

Byłoby wspaniale, gdyby mógł Pan przesłać mi żadnych wskazówek :)

Odpowiedz

12

można rozpocząć, wykonując instrukcje/kroki tutaj: Hosting Win32 Content in WPF

z wprowadzenia artykułu:

instruktażu z Win32 Wewnątrz systemu Windows Presentation Framework (HwndHost)

Aby ponownie zawartość Win32 wewnątrz aplikacji WPF, użyj HwndHost, który jest kontrola sprawia, że ​​HWNDs wyglądać zawartości WPF. Podobnie jak HwndSource, HwndHost jest prosty w użyciu: czerp z HwndHost i implementuj metody BuildWindowCore i DestroyWindowCore, następnie stwórz swoją klasę pochodną HwndHost i umieść ją wewnątrz aplikacji WPF.

Jeśli twoja logika Win32 jest już zapakowana jako kontrola, twoja implementacja BuildWindowCore to niewiele więcej niż połączenie z CreateWindow.

Jeśli masz konkretny problem, zapytaj tutaj w SO, a ludzie pomogą ci w konkretnych punktach.

+0

To było dokładnie to, czego szukałem :) Mam teraz otwarte okno dialogowe. Wielkie dzięki! – pablox

+0

Cieszę się, że pomogłem :) –

+0

Czy mogę używać 'HwndHost' do hostowania w typowej aplikacji Windows Forms? –