• 締切済み

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

使用環境 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

  • MFCでのタブコントロールについて

    MFCでタブコントロールを使用しようとしたのですが,使い方がわかりません。 ヘルプや参考書で調べてみても、いまいちわかりません。 タブを追加するにはどうすればいいのでしょうか? また,タブを選択することでテキストを表示したいのですが, それはどこで設定すればいいのでしょうか? ※参考となるサイトがあれば教えてください。

  • タブコントロールのタブ選択について

    環境  Visual Studio 2003 C# タブコントロールのタブ選択について質問があります。 Windows Application のForm にタブコントロールを配置。 タブ1からタブ2に選択された時点でメッセージを表示し「はい」であれば、タブ2へ、「いいえ」を選択した場合は、タブ2に遷移せずタブ1のままという動きを実装したいのですが方法がわかりません。 選択前のタブインデックスを記憶して、「いいえ」を選択した場合はそのタブインデックスを選択状態にすれば可能かと思いますが、一旦タブ2に遷移しタブ1に戻る形となり見た目的に良くないような気がします。 Visual Studio 2005 では Selecting イベントで e.Cancel = true; という方法でも一旦タブ2に遷移してしまいます。 どなたか、教えてください。 宜しくお願いします。

  • リストビューの選択状態を取得するメッセージはありますか?

    リストビューが選択状態(1行が青色や灰色の背景になる状態)にあって、エディットボックスが空欄では無いときに、 あるボタンを有効にするという処理をしたいと思っています。 リストビューが選択されていることを教えてくれるメッセージがあれば、教えてください。よろしくお願いします。 環境:Win32 API, VC++6.0

  • C++とWin32APIでタブコントロールを作成するには

    C++のWin32APIで、MFCを使わずに、 ダイアログボックスの中にタブコントロールを実装したいのですが、 その方法が解らず困っています。 とりあえずウインドウにタブコントロールを 付ける事まではできたものの、 (MFCを使用しない方法で)ダイアログボックスの中に 表示させる方法が見つからないのです・・・。 VisualStudioを使用しているので、 ツールボックスの中にある「Tab Control」というものを ダイアログボックスの中に貼り付けてみましたが、 [Tab1]~[Tab5]までありますが見た目上だけのものなので、 当然実行してもそこには何もありません。 (項目も、タブを切り替える処理も追加してないので 当たり前ですよね^^;) この方法はやはりMFCを使用しないと無理なのでしょうか? もし方法がございましたら、どうかご伝授をよろしくお願いします

  • パイプメッセージが通りません

    以下の環境でソフトを製作しています。  VC++ Ver6.0  MFCベース ここで、2つのPC間でメッセージのやりとりをして連係して処理を進める箇所があり、パイプメッセージを使用しているのですが、パイプメッセージがうまく送られない現象が発生しています。PCのOSは一つはWindows2000で、もうひとつはXPです。Windows2000同志なら正常にやりとりできることは確認しています。  OS、または、ログオンするときのユーザ名などにより、何かパイプメッセージ使用に制限が発生してくるのでしょうか。  よろしくお願いします。

  • Microsoft Foundation Class の選択ができない。

    VC++6.0を使用していますが、Microsoft Foundation Classの選択が「共有DLLでMFC使用」だけになっていて、「 MFCのスタティックライブラリを使用」を選択できません。どうすればいいのでしょうか。

  • (VBA)TabStripのTabが選択時に

    EXCEL2003 UserForm TabStripのTabを選択したときに 選択されたTabのみ  1)「背景色を変える」  2)「タブ名の色を変える」 どちらか可能でしょうか? tabNo = TabStrip1.Value Select Case tabNo Case 0   赤色の背景(または赤色のタブ文字)   シート1を選択   処理1をする Case 1   青色の背景(または青色のタブ文字)   シート2を選択   処理2をする みたいな感じで考えてるのですが・・・・ おおむね、処理内容では困ってないのですが ユーザーが 「どのタブを選択してるのかわかりにくい」 「いま選んでるタブの文字を赤色にしてくれないか」 との要望ありまして・・・ EXCELの仕様上、出来ない処理でしょうか?

  • VC++.netのボタンを透明にしたいのですが

    VC++.netのボタンを透明にしたいのですが MFCだと出来るみたいなのですが VC++.net2008のExpressEditionで製作している為MFCが使えません フォームに任意のイラストを貼り付け イラストのある部分をクリックするとイベントが始まる というプログラムを作りたいのですが イベントを発生させるのに、ボタンを使用している為 ボタン形状が四角というのがよろしくありません 透明で使用できれは、任意の場所に配置でき イラストの景観がよくなります 何かヒントでも良いので よろしくお願いします

  • タブコントロール上のリストコントロール(再描画されない)

    VS2005 SP1のMFCでプログラムを作成しています。 OSはWindows XP SP3です。 タブコントロールを使用したダイアログベースです。 タブの切り替えによりコントロールを配置した子ウィンドウ(実際はダイアログ)を表示させたり、非表示にさせたりしています。 ■配置と親子関係 ダイアログ:(1)  ↓(の上に) タブコントロール:(2)((1)が親)  ↓(の上に) ダイアログ:(3)((1)が親)  ↓(の上に) リストコントロール:(4)((3)が親) ■現象 本プログラムを別のウィンドウで隠し、ALT+TAB等で、フォアグラウンドに持ってきた場合に、(4)のリストコントロールが再描画されません。 ※リストコントロールでアイテムを選択した状態でないと発生しない模様 ただし配置と親子関係で示した構成は2組あり、1組はリストコントロールのリソースプロパティで、TransparentをTUREにすることにより現象が解消されました。(たぶん最後にリストコントロールが描画されるようになった) しかし、2組目は同じ対策をとっても現象が起こってしまいます。 画面切り替わり時によくみていると、リストコントロールが一瞬みえてから消えてるので、別の何かが上書き描画により消えていると思われます。 対策として、 OnPaint()にてリストコントロールをInvalidate()すれば解消されることはされるのですが、ツールバーにツールチップが表示するだけで、リストコントロールの再描画が発生してチラつきます。 説明が長くなってしまいましたが、どなたか良い解決策をご教授お願いします。 最後まで読んで頂き、有難う御座います。

  • ダイアログベースのウィンドウメッセージについて

    Win2kのVC++6.0 MFC ダイアログベースでのウィンドウメッセージ処理で困っています。 OnCharがダイアログでは認識できません。ウィンドウでは認識できます。 何か特別な処理が必要なのでしょうか?

このQ&Aのポイント
  • 国民年金の住所変更手続きをする際に必要な物は印鑑と年金手帳です。
  • 同じ市町村へ引っ越す際にも、国民年金の住所変更手続きが必要です。
  • 国民年金の住所変更手続きには印鑑と年金手帳が必要で、引っ越し先が同じ市町村であっても手続きが必要です。
回答を見る

専門家に質問してみよう