dポイントプレゼントキャンペーン実施中!

使用環境 MS VC++ 2005
OS XP

タブを作成して ある状態時に任意のタブをdisable にしたいと
考えております。
ここで言っているdisable とは、表示は存在するが、タブを選択でき
ない状態、(タブの文字も可能なら 薄い色に変更したいです)

タブアイテムの属性情報であるTCITEM を見ましたが上記の設定を
する方法が見つけれませんでした。

ちなみにMFCは使用しておりません。
全てメッセージで処理しております。

よろしくお願いします。

A 回答 (2件)

グレー表示についてはサブクラス化して独自に描くしかないでしょう。


タブを選択できなくする手法としては
TCN_SELCHANGINGメッセージを捕まえて
//HWND TabHwndとして
TCHITTESTINFO tHitTestInfo;
GetCursorPos(&tHitTestInfo.pt);
ScreenToClient(TabHwnd, &tHitTestInfo.pt);
SendMessage(TabHwnd, TCM_HITTEST, 0, (LPARAM)&tHitTestInfo);
int nIndex = HitTest(&tHitTestInfo);
if (nIndex == /*選択させたくないタブのインデックス*/)
{
return 1;
}
とかすることで可能です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

チャレンジしてみます。

お礼日時:2007/11/05 19:56

オプション等にはないと思います。




あるいはタブ選択時に強制移動させるとか。

case TCN_SELCHANGED:
{
// インデックス1→2へ移動
int n = TabCtrl_GetCurSel(hTab);
if(n == 1)
TabCtrl_SetCurSel(2);
}
return 0;


タブのグレー描画も含めてサブクラス化するのが正解かもしれませんが、面倒な場合、ラベルを上から貼ってしまうのが楽な気がします。

↓こういう感じの初期化に対して
TCITEM ti
ti.mask = TCIF_TEXT;
ti.pszText = "タブ0";
TabCtrl_InsertItem(hTab, 0, &ti);
ti.pszText = "タブ1";
TabCtrl_InsertItem(hTab, 1, &ti);
ti.pszText = "タブ2";
TabCtrl_InsertItem(hTab, 2, &ti);


↓こういったラベル用のスタティックを作っておいて
RECT rect;
TabCtrl_GetItemRect( hTab, 1, &rect );
InflateRect(&rect, -2, -2)
hStatab = CreateWindow("static", "タブ1", WS_CHILD | WS_DISABLED,
rect.left, rect.top, rect.right-rect.left,rect.bottom-rect.top, hTab, NULL, hInst, NULL) ;


// タブの無効化にときに上から隠す
ShowWindow(hStatab, SW_SHOW);
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
直接的な(ボタンのdisable の様な)方法は無いのですね。
たまに自分の探し方が悪いのか、本当に無いのかで悩んでいます。

お礼日時:2007/11/05 19:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!