У владельца нарисованного tabcontrol есть более широкие вкладки - PullRequest
3 голосов
/ 20 августа 2011

Я пытаюсь нарисовать табулятор.Когда я рисую вкладки, используя размеры, возвращаемые GetTabRect, вкладки рисуются заметно шире по сравнению с тем, как они обычно рисуются.Я думал, что он пытается освободить место для изображения, но у меня нет изображений, определенных для вкладок.Почему бы GetTabRect вернуть более широкий размер?

Не знаю, имеет ли это какое-либо отношение к этому, но вот как я установил его для владельца в пользовательском конструкторе TabControl.

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

1 Ответ

4 голосов
/ 21 августа 2011

Я нашел решение здесь: 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...