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 に答える