/// <summary> /// gestion de startComposition et EndComposition /// </summary> /// <param name="m"></param> protected override void WndProc(ref Message m) { const int WM_IME_STARTCOMPOSITION = 0x010D; const int WM_IME_ENDCOMPOSITION = 0x010E; const int WM_IME_COMPOSITION = 0x010F; try { switch (m.Msg) { case WM_IME_STARTCOMPOSITION: FInComposition = true; break; case WM_IME_ENDCOMPOSITION: FInComposition = false; break; case WM_IME_COMPOSITION: break; } base.WndProc(ref m); switch ((Msgs)m.Msg) { case Msgs.WM_NCCALCSIZE: int a = (int)m.WParam; if (a != 0) { NCCalcSizeParams size = (NCCalcSizeParams)Marshal.PtrToStructure(m.LParam, typeof(NCCalcSizeParams)); size.rgrc0.Top += 1; size.rgrc0.Left += 1; size.rgrc0.Right -= 1; size.rgrc0.Bottom -= 1; Marshal.StructureToPtr(size, m.LParam, false); } else { Debug.WriteLine("WM_NCCALCSIZE fCalcValidRects = false"); } break; case Msgs.WM_NCPAINT: FlagsDCX flags = FlagsDCX.DCX_CACHE | FlagsDCX.DCX_CLIPSIBLINGS | FlagsDCX.DCX_WINDOW | FlagsDCX.DCX_VALIDATE; IntPtr dc = NativeMethods.GetDCEx(this.Handle, m.WParam, flags); if (dc != IntPtr.Zero) { try { using (Graphics g = Graphics.FromHdc(dc)) { Rectangle rectRegion = Rectangle.Empty; rectRegion = new Rectangle(0, 0, this.Size.Width - 1, this.Size.Height - 1); g.DrawRectangle(Pens.Black, rectRegion); } } finally { NativeMethods.ReleaseDC(this.Handle, dc); } } m.Result = IntPtr.Zero; break; /* * case Msgs.WM_GETDLGCODE : * m.Result = new IntPtr((int)(DialogCodes.DLGC_WANTTAB | DialogCodes.DLGC_WANTARROWS)); * break; */ } } catch { throw; } }
internal extern static IntPtr GetDCEx(IntPtr hWnd, IntPtr hrgnClip, FlagsDCX flags);