/// <summary> /// 取消窗口类的注册,删除内存 /// </summary> protected virtual void DestroyWindowClassCore() { if (_wndClassAtom != 0) { var moduleHandle = ApiKernel32.GetModuleHandle(null); ApiUser32.UnregisterClass(new IntPtr(_wndClassAtom), moduleHandle); _wndClassAtom = 0; } }
/// <summary> /// 注册窗口类。默认的。 /// </summary> /// <param name="className"></param> /// <returns></returns> /// <remarks> /// 抽象的记录提供的默认的窗口注册方法。在我们的项目中,我们需要注册的是窗口是分层窗口,用来实现边框的 /// </remarks> protected ushort RegisterClass(string className) { var wndClassEx = default(WNDCLASSEX); wndClassEx.cbSize = (uint)Marshal.SizeOf(typeof(WNDCLASSEX)); wndClassEx.style = (uint)WndClassStyle.CS_DEFAULT; // 原来是 0u wndClassEx.cbClsExtra = 0; // 默认0就行 wndClassEx.cbWndExtra = 0; // 同上 wndClassEx.hInstance = ApiKernel32.GetModuleHandle(null); // 程序的句柄 wndClassEx.hIcon = IntPtr.Zero; // 默认 0 就行 wndClassEx.hCursor = IntPtr.Zero; // 默认 0 就行 wndClassEx.hbrBackground = IntPtr.Zero; // 默认 0 就行 wndClassEx.lpfnWndProc = Marshal.GetFunctionPointerForDelegate(_wndProc = new WndProc(WndProc)); wndClassEx.lpszClassName = className; wndClassEx.lpszMenuName = null; return(ApiUser32.RegisterClassEx(ref wndClassEx)); }