Пример #1
0
 /// <summary>
 /// 取消窗口类的注册,删除内存
 /// </summary>
 protected virtual void DestroyWindowClassCore()
 {
     if (_wndClassAtom != 0)
     {
         var moduleHandle = ApiKernel32.GetModuleHandle(null);
         ApiUser32.UnregisterClass(new IntPtr(_wndClassAtom), moduleHandle);
         _wndClassAtom = 0;
     }
 }
Пример #2
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));
        }