ステータスバーにアプリケーション独自の情報を表示する |
一般的なアプリケーションでは、ステータスバーのインプリメントはメインフレームクラス、表示内容の更新はビュークラスで行いたい、という場合が多いのではないでしょうか。ここでは標準のステータスバーをカスタマイズする方法を紹介します。 標準でCMainFrameクラスにインプリメントされる indicators 配列を変更します。 static UINT indicators[] = { ID_SEPARATOR, ID_INDICATOR_INFO1, ID_INDICATOR_INFO2, ID_INDICATOR_INFO3, /* ID_INDICATOR_KANA, ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, */ }; 追加したID_INDICATOR_INFO1等のID値は resource.h に定義します。 次に、リソースファイルのストリングテーブルに、各カスタマイズ項目の最大文字列長となる項目を指定しておきます。 STRINGTABLE DISCARDABLE BEGIN ID_INDICATOR_INFO1 "選択範囲 : (9999, 9999)-[9999, 9999]" ID_INDICATOR_INFO2 "x 9倍" ID_INDICATOR_INFO3 "9999 x 9999 : 99bpp" END 初期状態ではステータスバーペインの内容をクリアしておきたい場合は、CMainFrameクラスでステータスバーを構築した後に、以下のような記述を行います。 m_wndStatusBar.SetPaneText( m_wndStatusBar.CommandToIndex( ID_INDICATOR_INFO1 ), "" ); ビュークラスからステータスバーペインの内容更新を可能とするため、ステータスバーのポインタを外部参照できるようにします。 (CMainFrameクラスでの記述) CStatusBar* myStsBar; // ステータスバー外部参照変数 CMainFrame::OnCreateでステータスバーを構築した後に追記 :(省略) // ステータスバーへのポインタをグローバル変数に記憶 myStsBar = &m_wndStatusBar; :(省略) (CViewクラスでの記述) extern CStatusBar* myStsBar; // ステータスバーへの参照ポインタ 次のようなメンバ関数を追記 void CMyView::SetStatusInfo1( LPCTSTR szinfo ) { // ステータスバーペインに情報を表示 myStsBar->SetPaneText( myStsBar->CommandToIndex( ID_INDICATOR_INFO1 ), szinfo ); } |