private void RegisterWindowClass() { _wndProcDelegate = WndProc; var wc = new WindowClassEx { Styles = WindowClassStyles.CS_HREDRAW | WindowClassStyles.CS_VREDRAW | WindowClassStyles.CS_OWNDC, WindowProc = _wndProcDelegate, InstanceHandle = Kernel32.GetModuleHandle(null), CursorHandle = User32.LoadCursor(IntPtr.Zero, (IntPtr)SystemCursor.IDC_ARROW), ClassName = CLASS_NAME }; wc.Size = (uint)Marshal.SizeOf(wc); // Load user icon - if any. wc.IconHandle = User32.LoadImage(Kernel32.GetModuleHandle(null), "#32512", ResourceImageType.IMAGE_ICON, 0, 0, LoadResourceFlags.LR_DEFAULTSIZE | LoadResourceFlags.LR_SHARED); if (wc.IconHandle == IntPtr.Zero) { Kernel32.SetLastError(0); // None loaded - load default. wc.IconHandle = User32.LoadImage(IntPtr.Zero, (IntPtr)SystemIcon.IDI_APPLICATION, ResourceImageType.IMAGE_ICON, 0, 0, LoadResourceFlags.LR_DEFAULTSIZE | LoadResourceFlags.LR_SHARED); } ushort windowClass = User32.RegisterClassEx(ref wc); if (windowClass == 0) { CheckError("Win32: Failed to register window class.", true); } CheckError("Win32: Could not register class."); }