2

タブのサイズを変更したい。

タブに閉じ十字を追加しましたが、タブのテキストとかなり競合しています。

ここに画像の説明を入力

これまでのところ、次のことがわかりました。

  • GetItemRect(int i, RECT* rc)私にrectを与えます。私が本当に欲しいのは SetItemRect です。
  • SetItemアイテムにはそのサイズが含まれていないため、使用できません。それは私が与える内容に基づいて計算されます。
  • 文字列の最後にスペース char を追加することもできますが、それは自然の秩序に反するだけです。CStrings でピクセルを微調整しません。
  • SetSizeタブのサイズを設定することになっています(すべてのタブ?)。しかし、再描画をトリガーしない場所を見つけることができず、WM_PAINT ケースで配置すると無限ループが発生します。

これは、タブのコンテンツをカスタム描画する場所ですが、ここでサイズを変更することはできません。

LRESULT CSkinnedTabCtrl::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
switch (message) {
    case WM_PAINT: {
        ...

        CPaintDC dc(this); 

        INT nCount = GetItemCount();

        for (INT i = 0; i < nCount; i++) {
            CRect rc;
            GetItemRect(i, rc);
            DrawItem(dc, i, rc);
        }

        return TRUE;
    }

タブのサイズはどこで、どのように設定しますか?

4

1 に答える 1

0

IIRC WM_NCCALCSIZE メッセージを上書きする必要があります。

于 2013-02-17T08:55:00.913 に答える