Я регистрирую класс через RegisterClassEx, но после этого шага окно больше не появляется.RegisterClassEx в .NET не работает
Вот как я зарегистрировать его:
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;
А вот как я создаю окно
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 возвращает не нулевое значение. Таким образом, регистрация может быть успешной. Итак, где причина? Без выполнения RegisterClassEx он отлично работает, но мне нравится настраивать что-то вроде ссылки на WndProc Handler. Какие-нибудь подсказки для меня?
Я думаю, что wcx.lpszClassName не зависит от регистра, и у вас есть несоответствие стандартного класса «Редактировать», но я не совсем уверен. – Anton
Пробовал, но это не причина. – Kinimod
Ваш делегат обратного вызова будет GC'd из-под вас. Вы должны продлить свою жизнь. –