所有者绘制的tabcontrol具有更宽的选项卡

时间:2011-08-20 01:36:08

标签: .net winforms tabcontrol ownerdrawn

我正在尝试自定义绘制tabcontrol。当我使用GetTabRect返回的尺寸绘制标签时,与通常绘制的标签相比,标签的绘制范围明显更宽。我以为它试图为图像腾出空间,但我没有为标签定义图像。为什么GetTabRect会返回更大的尺寸?

不知道这是否与它有关,但这是我如何在自定义TabControl构造函数中将其设置为所有者绘制。

this.SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | 
              ControlStyles.DoubleBuffer | ControlStyles.ResizeRedraw | 
              ControlStyles.SupportsTransparentBackColor, true); 

1 个答案:

答案 0 :(得分:4)

我在这里找到了一个解决方案:http://www.codeproject.com/Messages/2707590/Re-Tab-Size.aspx

<强>引用:

当ControlStyle.UserPaint设置为true时,控件不再发送WM_SETFONT消息。
发送FontChange消息所需的代码:

[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

private const int WM_SETFONT = 0x30;
private const int WM_FONTCHANGE = 0x1d;

protected override void OnCreateControl()
{
   base.OnCreateControl();
   this.OnFontChanged(EventArgs.Empty);
}

protected override void OnFontChanged(EventArgs e)
{
   base.OnFontChanged(e);
   IntPtr hFont = this.Font.ToHfont();
   SendMessage(this.Handle, WM_SETFONT, hFont, (IntPtr)(-1));
   SendMessage(this.Handle, WM_FONTCHANGE, IntPtr.Zero, IntPtr.Zero);
   this.UpdateStyles();
}