いつもお世話になります。
開発環境VC++6.0 WinNT MFCです。
ダイアログベースからツールバーを作成しました。
次にツールチップを設けたいと思っております。
ツールバー以外のボタンは表示できたのですが、ツールバーのボタンのツールチップ表示がわかりません。
m_ToolBar.CreateEx(this); //TOOLBARを組み込む
m_ToolBar.LoadToolBar(IDR_TOOLBAR1); //アイコンを取り込む
m_ToolBar.SetButtons(NULL, 3);
m_ToolBar.SetButtonInfo(0, IDT_TOOL1,TBBS_BUTTON, 0);
m_ToolBar.SetButtonInfo(1, ID_SEPARATOR,TBBS_SEPARATOR, 6);
m_ToolBar.SetButtonInfo(2, IDT_TOOL2,TBBS_BUTTON, 1);
CSize size = m_ToolBar.CalcDynamicLayout(0, LM_HORZ);//ツールバーの高さを取り込み
CRect rect; //ツールバーの横幅
GetClientRect(rect);
// m_ReBar : CReBar型 のメンバー
m_ReBar.Create(this); //上下の灰色バーを表示
m_ReBar.AddBar(&m_ToolBar);
m_ReBar.MoveWindow(0, 0, rect.Width(), size.cy + 4); //位置とサイズを設定
m_ToolTip.Create(this); //tooltipの作成
m_ToolTip.AddTool(GetDlgItem(IDC_BUTTON1),This is OK button); //tooltipの表示
ツールバーに設けたボタンのIDはIDT_TOOL1とIDT_TOOL2です。
なんか題名が化けています。
題名はツールチップです。
表示させたい文字列をストリングテーブルに、ボタンにつけたのと同じIDで登録してみて
ください。
tibさんすみません。
表示させたい文字列はString Tableのキャプションに記述することですよね。
>ボタンにつけたのと同じIDで登録してみて
>ください。
なんですが、すみませんわかりません。
余談ですが
あの、リソースでToolbarを挿入して、IDR_TOOLBAR1に2つボタンを設けて
それぞれのボタンのプロパティはID、幅、高さ、プロンプト(この入力がキャプションに反映されてます)
です。
ボタンなので始め
m_ToolTip.AddTool((CButton*)GetDlgItem(IDT_TOOL1),元に戻す); //tooltipの表示
を記入して行なうとこの処理でエラーが発生してしまって・・・
IDT_TOOL1はボタンですよね。
もしかして、
m_ToolBar.CreateEx(this);
の第2引数にCBRS_TOOLTIPSが指定されていない、という事かな?
m_ToolBar.CreateEx(this, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_TOOLTIPS);
理解不足ですみません。
MSDNでCreateExのウインドウスタイルを眺めましたが、調べましたけど、引数はthisだけではいけない
のでしょうか?
m_ToolBar.CreateEx(this);
はNETでの流用ですが・・・。
String TableのIDT_TOOL1とIDT_TOOL2をどう生かせばいいのですか?
最低な質問ですみません。
すみません、この質問はよくないです・・・。
聞かなかったことにして下さい。
ちょっと考えてみます。
CToolBar::CreateEx()
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_ctoolbar.3a3a.createex.asp
Toolbar Control and Button Styles
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/toolbar/styles.asp
先に私が挙げた例の第2引数はCToolBar::Create()のデフォルト値を元にしていたもので
した。済みません。
実験君してみるとわかりますが、
アプリケーションウィザードでSDIのテストアプリを作って
リソースのストリングテーブルを見るとツールバーボタンに
割り振ったIDと同じIDで文字列が定義されているのがわかると思います。
ツールバーの場合、ウインドウスタイルにCBRS_TOOLTIPSがあれば、
この文字列を参照して勝手に表示されたような気がします。
この辺の挙動は、自分で簡単なテストアプリを作って確認した方が早いです。
テストアプリを作成して見ました。
String Tableには
IDT_TOOL1 32795 元に戻る\n元に戻る と表示されております。
以前のソースで
m_ToolBar.CreateEx(this);の所を
m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP |
CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_TOOLTIPS);
に変更致しました。
また調べても分からないのですが
m_ToolTip.AddTool((CButton*)GetDlgItem(IDT_TOOL1),元に戻す); //tooltipの表示
ですとエラーになります。
IDT_TOOL1というのはコントロールではなくただの変数なのですか?
お手数をお掛けします。
> IDT_TOOL1というのはコントロールではなくただの変数なのですか?
IDT_TOOL1 の文字の上にカーソルを置いて、[F12]を押下してみてください。
おはようございます。
[F12]を押下しても何もおきませんが・・・
RAPTさんの仰るF12キーで普通はいいのですが、もしかしたらキーアサインを変えていた
り、単にファンクションキーでなく[F][1][2]と押されていたのかも知れませんが、
ソース上のIDT_TOOL1を選択した状態で右クリック。「IDT_TOOL1の定義位置を表示」を選
択、で同じ事ができるはずです。
resource.hというファイルが開いて、IDT_TOOL1はなんらかの整数に#defineされているこ
とでしょう。
resource.hにて
#define IDT_TOOL1 32794
#define IDT_TOOL2 32795
と記述されております。
しかしなぜm_ToolTip.AddTool((CButton*)GetDlgItem(IDT_TOOL1),元に戻す);
が駄目なのか・・・、
例えばIDC_BUTTON1とIDT_TOOL1とは何が違うのでしょうか?
そもそも、
> しかしなぜm_ToolTip.AddTool((CButton*)GetDlgItem(IDT_TOOL1),元に戻す);
> が駄目なのか・・・、
で、どういうエラーが出るんですか? エラーの内容はリポートされませんか?
GetDlgItem()の結果がNULLだった、なんてことはありませんか?