devlights
11/11/2013 - 8:48 AM

透過した色を綺麗に表示できるパネル

透過した色を綺麗に表示できるパネル

  class PanelEx : Panel
  {
    protected override void OnCreateControl()
    {
      base.OnCreateControl();
      this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.CacheText, true);
    }

    protected override CreateParams CreateParams
    {
      get
      {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= NativeMethods.WS_EX_COMPOSITED;
        return cp;
      }
    }

    public void BeginUpdate()
    {
      NativeMethods.SendMessage(Handle, NativeMethods.WM_SETREDRAW, IntPtr.Zero, IntPtr.Zero);
    }

    public void EndUpdate()
    {
      NativeMethods.SendMessage(Handle, NativeMethods.WM_SETREDRAW, new IntPtr(1), IntPtr.Zero);
      Parent.Invalidate(true);
    }
  }

  class TableLayoutPanelEx : TableLayoutPanel
  {
    protected override void OnCreateControl()
    {
      base.OnCreateControl();
      this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.CacheText, true);
    }

    protected override CreateParams CreateParams
    {
      get
      {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= NativeMethods.WS_EX_COMPOSITED;
        return cp;
      }
    }

    public void BeginUpdate()
    {
      NativeMethods.SendMessage(Handle, NativeMethods.WM_SETREDRAW, IntPtr.Zero, IntPtr.Zero);
    }

    public void EndUpdate()
    {
      NativeMethods.SendMessage(Handle, NativeMethods.WM_SETREDRAW, new IntPtr(1), IntPtr.Zero);
      Parent.Invalidate(true);
    }
  }

  static class NativeMethods
  {
    public static int WM_SETREDRAW = 0x000B; //uint WM_SETREDRAW
    public static int WS_EX_COMPOSITED = 0x02000000;


    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); //UInt32 Msg
  }