• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VC++ MFCButton マウスが通過するときの文字列を後から変更するには?)

VC++ MFCButton マウスが通過するときの文字列を後から変更するには?

このQ&Aのポイント
  • VC++ 2008のダイアログでCMFCButtonを使用しています。マウスが通過すると、ステータスバーに文字列が表示される仕組みを利用しています。文字列はリソースで定義されており、ツールチップとステータスバーに表示されます。ただし、起動後にボタンの意味が変わる場合には、マウスが通過するときの文字列をダイナミックに変更する必要があります。
  • マウスが通過するときの文字列を後から変更する方法について教えてください。
  • マウスが通過するときの文字列はリソースで定義されており、ステータスバーに表示されます。起動後にボタンの意味が変わる場合は、この文字列をダイナミックに変更する必要があります。どのようにすれば変更できるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

当方は、MFCプログラミングはよく使いますが、2008を所有していないため、CMFCButtonボタンなるクラスは初めて知りました。 MFCButtonなりCButtonのサブクラス化したクラスを作ることで万事解決だと思いますが。。 便利なクラスは開発効率を良くするけど、ちょっと違うことをやろうと思ったら、結局サブクラス化しないとできないことはよくあります。 もちろん、サブクラス化しないで済む方法があれば当然そちらを採用しますが。 2008を持ってないので、別バージョンのVC&MFCで似たようなことをするサンプルプログラムを作ってみました。 サブクラス化したクラスの中で、OnMouseMove()イベントハンドラを追加。 OnMouseMove()イベントハンドラは、マウスが動いている間、何度も呼ばれるから、ステータスバーやツールチップの文字列の変更は一度しか呼び出さない仕組みが必要。 ボタンに割り当てるステータスバーに表示する文字列をボタンもしくはその親であるダイアログなりに保持する。この文字列をAとすると ここで、ステータスバーの文字列を取得する(GetPaneTextを使う)なりして、Aと比較して、異なれば、ステータスバーの表示を変更。 ステータスバーの文字列は、SetPaneText()関数で変更。 ツールチップは、CMFCButton::SetTooltipで変更。 サブクラス化したクラスを使うときは、リソースエディタでCMFCButtonなりCButtonクラスなりの変数を追加する。 すると、クラスのメンバ変数に、 CMFCButton m_btn1; なりができているから、 これを CMFCButtonEx m_btn1; とするだけで、サブクラス化したクラスにメッセージがいきます。 わざわざSubclassDlgItem()は使わないでもOK。 もちろん、そのヘッダーファイルの中で、サブクラス化したクラスのヘッダーファイルを#includeする必要があります。 文字列リソースを必要な分だけリソースエディタのString Tableで作って、 ボタンに割り当てるツールチップやステータスバーに対する文字列を変更する箇所で、 str1.LoadString(IDS_TEXT_BTN1_STATUSBAR_TEXT1); とか str1.LoadString(IDS_TEXT_BTN1_STATUSBAR_TEXT2); などとして、リソースから適切な文字列を取得。 MFCButtonをサブクラス化したクラスに SetStatusBarText(LPCTSTR); みたいな関数を定義して、 m_btn1.SetStatusBarText(str1);みたいにボタンに割り当てるステータスバーに表示するテキストなりを設定する。 この関数はサブクラス化したクラスのユーザー定義メンバ関数で、 void SetStatusBarText(LPCTSTR lpszStatusBarText){m_strSetStatusBarText = lpszStatusBarText;} のような感じ。 こんな感じでうまくいくと思うんですが。。 ご参考まで。。

sekinegoo
質問者

お礼

ご丁寧な回答ありがとうございました。

関連するQ&A