Ich registriere eine Klasse über RegisterClassEx, aber nach diesem Schritt erscheint das Fenster nicht mehr.RegisterClassEx in .NET schlägt fehl
Hier ist, wie ich es registrieren:
wcx = new WNDCLASSEX();
wcx.cbSize = Convert.ToUInt32(Marshal.SizeOf(typeof(WNDCLASSEX))); // size of structure
wcx.style = ClassStyles.HorizontalRedraw | ClassStyles.VerticalRedraw; // redraw if size changes
wcx.lpfnWndProc = ProcessWndProc; // points to window procedure
wcx.cbClsExtra = 0; // no extra class memory
wcx.cbWndExtra = 0; // no extra window memory
wcx.hInstance = hinstance; // handle to instance
wcx.hIcon = IntPtr.Zero; // predefined app. icon
wcx.hCursor = IntPtr.Zero; // predefined arrow
wcx.hbrBackground = IntPtr.Zero; // white background brush
wcx.lpszMenuName = "MainMenu"; // name of menu resource
wcx.lpszClassName = "EDIT"; // name of window class
wcx.hIconSm = IntPtr.Zero;
// Register the window class.
return RegisterClassEx(ref wcx)!=0;
Und hier, wie ich das Fenster erstellen
int wndWidth = hwndRect.Right - hwndRect.Left;
int wndHeight = hwndRect.Bottom - hwndRect.Top;
Debug.WriteLine("Coord: " + hwndRect.Left.ToString() + "//" + hwndRect.Top.ToString() + "--" + wndWidth.ToString() + "//" + wndHeight.ToString());
hwnd = User32.CreateWindowEx(
User32.WindowStylesEx.WS_EX_TRANSPARENT
| User32.WindowStylesEx.WS_EX_TOPMOST
| User32.WindowStylesEx.WS_EX_TOOLWINDOW,
wcx.lpszClassName, this.Name, User32.WindowStyles.WS_POPUP | User32.WindowStyles.WS_VISIBLE,
hwndRect.Left, hwndRect.Top, wndWidth, wndHeight, IntPtr.Zero, IntPtr.Zero, wcx.hInstance, IntPtr.Zero
);
if (hwnd == null)
return false;
RegisterClassEx einen nicht Nullwert zurückgibt. So kann die Registrierung erfolgreich sein. Wo ist die Ursache? Ohne die Ausführung von RegisterClassEx funktioniert es gut, aber ich mag es, etwas wie WndProc Handler zu referenzieren. Irgendwelche Hinweise für mich?
Ich denke, wcx.lpszClassName ist case insensetive, und Sie haben keine Übereinstimmung mit Standard-Windows-Klasse "Edit", aber ich bin mir nicht absolut sicher. – Anton
Versucht es, aber das ist nicht die Ursache. – Kinimod
Ihr Callback-Delegat wird von Ihnen unterbunden. Sie müssen seine Lebensdauer verlängern. –