Я разрабатываю приложение рисования в Visual C++
с помощью Direct2D
.
У меня есть демо-приложение, где:
// create the ID2D1Factory
D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &m_pDirect2dFactory);
// create the main window
HWND m_hwnd = CreateWindow(...);
// set the render target of type ID2D1HwndRenderTarget
m_pDirect2dFactory->CreateHwndRenderTarget(
D2D1::RenderTargetProperties(),
D2D1::HwndRenderTargetProperties(m_hwnd, size),
&m_pRenderTarget
);
И когда я получаю сообщение WM_PAINT
, я рисую свои фигуры.
Теперь мне нужно разработать элемент управления WPF (своего рода Panel), который представляет мою новую цель рендеринга (поэтому она заменит главное окно m_hwnd
), так что я могу создать новый (С#) проект WPF с основным окном, имеющим дочерние элементы моей пользовательской панели, а часть рендеринга остается в собственном проекте С++/CLI DLL.
Как я могу это сделать? Что я должен установить в качестве моей новой цели рендеринга?
Я думал использовать дескриптор моего окна WPF:
IntPtr windowHandle = new WindowInteropHelper(MyMainWindow).Handle;
Но мне нужно рисовать на панели, а не в моем окне.
Обратите внимание, что я не хочу использовать классы WPF для части рендеринга (Shapes
, DrawingVisuals
...)