Как вызвать нативный код, который рисует в WPF Image из кода C #? - PullRequest
2 голосов
/ 30 сентября 2011

У меня есть собственная библиотека (нет доступных источников), обернутая в код C #.

Существует следующая декларация C #:

[DllImport(DRIVER_DLL_NAME, 
 CallingConvention = CallingConvention.Cdecl, 
 EntryPoint = "RenderBitmap")]
private static extern int RenderBitmap(int hWnd);

Мне нужно вызвать эту функцию из моего проекта WPF C #.

У меня есть рабочий пример кода для форм Windows:

System.Windows.Forms.PictureBox DisplayWindow;
...
RenderBitmap(DisplayWindow.Handle.ToInt32());

И я не нашел, как это сделать с WPF System.Windows.Controls.Image вместо System.Windows.Forms.PictureBox - нет свойства Handle или чего-то подобного.

Более того, я нашел в «Взаимодействие WPF и Win32» следующее утверждение: "Когда вы создаете окно WPF, WPF создает HWND верхнего уровня и использует HwndSource для помещения окна и его содержимого WPF в HWND. Остальная часть содержимого WPF в приложении разделяет этот отдельный HWND." . Кажется, что дескриптор HWND вообще не существует для Image.

Как вызвать нативный код, который рисует в WPF Image из кода C #?

1 Ответ

3 голосов
/ 30 сентября 2011

WPF Controls не имеет дескрипторов, как в WinForms. Доступна только ручка основного окна:

Например, в классе главного окна (или использовать Application.Current.MainWindow):

 var handle = (new WindowInteropHelper(this)).Handle;
 var hwnd = HwndSource.FromHwnd(handle);

Похоже, вы должны рассмотреть другой подход вместо собственных вызовов.

Кстати, зачем вам такая низкая функциональность рисования? Я просто могу предположить, что вы просто хотите повторно использовать уже реализованный для WinForms. Возможно, вы можете достичь того же, используя встроенные функции WPF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...