2011-12-28 8 views
5

Mam biblioteki, które pobierają do danego HDC przy użyciu GDI + apis. Chcę użyć tego w aplikacji WPF. Próbowałem pobrać uchwyt z klasy WindowInteropHelper i przekazać go do metody biblioteki, która wykonuje rysunek. Jednak zawiedzie tylko dlatego, że nie może tworzyć grafiki Gdi + z tego uchwytu.Czy mogę uzyskać HDC z okna WPF, aby móc go narysować za pomocą Gdi + API?

Następnie próbowałem użyć elementu WinForm w sterowaniu WindowsFormsHost i używając HDC dostępnego w zdarzeniu malowania kontrolki WinForm i działało dobrze. Co chcę wiedzieć, czy to samo można zrobić, aby pracować bezpośrednio w oknie \ kontroli WPF? Czy jest jakiś inny sposób na uzyskanie HDC z elementów WPF, na których można użyć API do rysowania GDI?

Odpowiedz

6

Jeśli masz uchwyt okna (HWND) swojego okna WPF, przypuszczalnie uzyskane przy użyciu klasy WindowInteropHelper, to można łatwo uzyskać uchwyt do kontekstu urządzenia (HDC) dla tego okna.

Są dwa sposoby na osiągnięcie tego, chociaż ostatecznie oba robią to samo. Pierwszym z nich jest P/Invoke niezbędne funkcje API GDI +, ale możemy wykluczyć to dość szybko, ponieważ jest niepotrzebnie czasochłonne. Pamiętaj, że .NET Framework już opakowuje wszystkie te rzeczy dla rozwoju WinForms w System.Drawing namespace, aw szczególności Graphics class. Wszystko, co musisz zrobić, to dodać odniesienie do System.Drawing do swojej aplikacji WPF, a otrzymasz całą tę zapakowaną funkcjonalność za darmo.

Częścią zainteresowania jest Graphics.FromHwnd method, który tworzy nowy obiekt Graphics z określonego uchwytu okna (HWND).

Gdy masz, że można uzyskać uchwyt do kontekstu urządzenia (HDC) poprzez wywołanie Graphics.GetHdc method, która zwraca dokładnie to, co jesteś po-wartość IntPtr który reprezentuje uchwyt do kontekstu urządzenia.

Pamiętaj, że musisz wywołać Dispose method na swoim obiekcie Graphics po zakończeniu, aby zwolnić powiązane zasoby.

+0

Niestety to teraz działa dla mnie – Andreas

Powiązane problemy