Ich muss ein Win32-Fenster in einem Windows Form-Steuerelement hosten. Ich hatte das gleiche Problem mit WPF und löste dieses Problem, indem ich die Steuerung verwendete.HwndHost für Windows Form - Win32/WinForm Interoperabilität
ich dieses Tutorial gefolgt:
Walkthrough: Hosting a Win32 Control in WPF
Gibt es eine gleichwertige Kontrolle in Windows Form?
Ich habe eine Panel
und seine Handle
Eigenschaft, verwende ich diesen Griff als Eltern meines Direct2D Zielfenster machen:
// Register the window class.
WNDCLASSEX wcex = { sizeof(WNDCLASSEX) };
// Redraws the entire window if a movement or size adjustment changes the height
// or the width of the client area.
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = Core::WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = sizeof(LONG_PTR);
wcex.hInstance = HINST_THISCOMPONENT;
wcex.hbrBackground = nullptr;
wcex.lpszMenuName = nullptr;
wcex.hCursor = LoadCursor(nullptr, IDI_APPLICATION);
wcex.lpszClassName = L"SVGCoreClassName";
RegisterClassEx(&wcex);
hwnd = CreateWindow(
L"SVGCoreClassName", // class name
L"", // window name
WS_CHILD | WS_VISIBLE, // style
CW_USEDEFAULT, // x
CW_USEDEFAULT, // y
CW_USEDEFAULT, // width
CW_USEDEFAULT, // height
parent, // parent window
nullptr, // window menu
HINST_THISCOMPONENT, // instance of the module to be associated with the window
this); // pointer passed to the WM_CREATE message
...
hr = d2dFactory->CreateHwndRenderTarget(
D2D1::RenderTargetProperties(),
D2D1::HwndRenderTargetProperties(hwnd, size, D2D1_PRESENT_OPTIONS_IMMEDIATELY),
&renderTarget);
Der Code funktioniert, wenn ich den HwndHost
Muttergriff mit WPF verwenden. Aber es macht nichts, wenn ich den System.Windows.Forms.Panel
Handle benutze.
Sie könnten daran interessiert sein, ['NativeWindow'] (https://msdn.microsoft.com/en-us/library/system.windows.forms.nativewindow.aspx). –
Alle Winforms-Steuerelemente sind bereits Win32-Fenster, so dass "Hosting" nicht viel Sinn macht. Sie müssen die Art dieses Fensters besser beschreiben. Wem gehört es? Wie erstellst du es? –
@HansPassant siehe meine Bearbeitung. – Nick