Можно ли получить HDC из окна WPF, чтобы я мог рисовать на нем с помощью Gdi+ API?

У меня есть библиотека, которая опирается на данный HDC, используя GDI+ apis. Я хочу использовать это в приложении WPF. Я попытался получить дескриптор из класса WindowInteropHelper и передать его в библиотечный метод, который выполняет рисование. Однако он терпит неудачу просто потому, что не может создать Gdi+ Graphics из этого дескриптора.

Затем я попытался использовать элемент WinForm в элементе управления WindowsFormsHost и использовать HDC, доступный в событии рисования элемента управления WinForm, и он работал нормально. Я хочу знать, можно ли сделать то же самое, чтобы работать напрямую с WPF control\window? Есть ли какой-то другой способ получить HDC из элементов WPF, на которых можно использовать GDI draw apis?

1 ответ

Решение

Если у вас есть дескриптор окна (HWND) вашего окна WPF, предположительно полученного с помощью WindowInteropHelper класс, то вы можете легко получить дескриптор к контексту устройства (HDC) для этого окна.

Есть два способа добиться этого, хотя оба в конечном итоге делают одно и то же. Первый - это P/Invoke необходимых функций API GDI+, но мы можем исключить это довольно быстро, так как это излишне отнимает много времени. Помните, что.NET Framework уже оборачивает все это для разработки WinForms в System.Drawing пространство имен, и, в частности, Graphics класс Так что все, что вам нужно сделать, это добавить ссылку на System.Drawing в ваше приложение WPF, и вы получите все эти функциональные возможности бесплатно.

То, что вас интересует, это Graphics.FromHwnd метод, который создает новый Graphics объект из указанного дескриптора окна (HWND).

Получив это, вы можете получить дескриптор контекста устройства (HDC) позвонив Graphics.GetHdc метод, который возвращает именно то, что вы ищете - IntPtr значение, которое представляет дескриптор контекста устройства.

Помните, что вам нужно позвонить Dispose метод на вашем Graphics объект после того, как вы закончили с ним, чтобы освободить связанные с ним ресурсы.

Другие вопросы по тегам