【问题标题】:Owner drawn tabcontrol has wider tabs所有者绘制的选项卡控件具有更宽的选项卡
【发布时间】:2011-10-31 00:51:27
【问题描述】:

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

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

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

【问题讨论】:

    标签: .net winforms tabcontrol ownerdrawn


    【解决方案1】:

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

    【讨论】:

    • 尤里卡!这一直困扰着我很长时间! +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多