3

我正在尝试自定义绘制选项卡控件。当我使用返回的尺寸绘制选项GetTabRect卡时,与通常绘制的方式相比,这些选项卡的绘制明显更宽。我认为它试图为图像腾出空间,但我没有为选项卡定义图像。为什么会GetTabRect返回更大的尺寸?

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

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

1 回答 1

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();
}
于 2011-08-21T00:28:55.627 回答