Exemplo n.º 1
0
        /// <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;
            }
        }
Exemplo n.º 2
0
 internal extern static IntPtr GetDCEx(IntPtr hWnd, IntPtr hrgnClip, FlagsDCX flags);