• 締切済み

タブコントロールに付いて

使用環境 MS VC++ 2005 OS XP タブを作成して ある状態時に任意のタブをdisable にしたいと 考えております。 ここで言っているdisable とは、表示は存在するが、タブを選択でき ない状態、(タブの文字も可能なら 薄い色に変更したいです) タブアイテムの属性情報であるTCITEM を見ましたが上記の設定を する方法が見つけれませんでした。 ちなみにMFCは使用しておりません。 全てメッセージで処理しております。 よろしくお願いします。

みんなの回答

  • FAY
  • ベストアンサー率49% (95/193)
回答No.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; } とかすることで可能です。

xionggu
質問者

お礼

回答ありがとうございます。 チャレンジしてみます。

  • iyomante
  • ベストアンサー率60% (14/23)
回答No.1

オプション等にはないと思います。 あるいはタブ選択時に強制移動させるとか。 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);

xionggu
質問者

お礼

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

関連するQ&A