gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:59:54 25 4
gpt4 key购买 nike

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

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

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

最佳答案

我在这里找到了解决方案: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();
}

关于.net - 所有者绘制的 tabcontrol 具有更宽的选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7128996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com