ステータス バー ペインのテキストの更新

この記事では、MFC ステータス バー ペインに表示されるテキストを変更する方法について説明します。 ステータス バー (CStatusBar クラスのウィンドウ オブジェクト) には、いくつかの "ペイン" が含まれています。各ペインはステータス バーの四角形の領域で、情報を表示するために使用できます。 たとえば、多くのアプリケーションでは、右端のウィンドウに CAPS LOCK、NUM LOCK、その他のキーの状態が表示されます。 アプリケーションでは、多くの場合、左端のウィンドウ (ペイン 0) に情報テキストが表示されます。"メッセージ ペイン" とも呼ばれる場合があります。たとえば、既定の MFC ステータス バーでは、メッセージ ペインを使用して、現在選択されているメニュー項目またはツール バー ボタンを説明する文字列が表示されます。 ステータス バーの図は、 アプリケーション ウィザードで作成された MFC アプリケーションのステータス バーを示しています。

既定では、MFC ではペインの作成時に CStatusBar ペインは有効にされません。 ペインをアクティブにするには、ステータス バーの各ペイン ON_UPDATE_COMMAND_UI マクロを使用し、ペインを更新する必要があります。 ペインは WM_COMMAND メッセージを送信しないので (ツール バーボタンのようではない)、コードを手動で入力する必要があります。

たとえば、1 つのペインがコマンド識別子として ID_INDICATOR_PAGE を持ち、ドキュメントに現在のページ番号が含まれているとします。 次の手順では、ステータス バーに新しいペインを作成する方法について説明します。

新しいペインを作成するには

  1. ペインのコマンド ID を定義します。

    [表示] メニューの [リソース ビュー] をクリックします。 プロジェクト リソースを右クリックし、 [リソース シンボル] をクリックします。 [リソース シンボル] ダイアログ ボックスで、New を選択します。 コマンド ID 名 (例: ID_INDICATOR_PAGE) を入力します。 ID の値を指定するか、または [リソース シンボル] ダイアログ ボックスで提案された値を受け入れます。 たとえば、ID_INDICATOR_PAGE の場合は既定値を受け入れます。 [リソース シンボル] ダイアログ ボックスを閉じます。

  2. ペインに表示する既定の文字列を定義します。

    リソース ビューを開き、アプリケーションのリソースの種類を一覧表示するウィンドウで [文字列テーブル] をダブルクリックします。 文字列テーブル エディターを開 いた後、[挿入]メニューから [新しい文字列] を選択 します。 ペインのコマンド ID (例: ID_INDICATOR_PAGE) を選択し、"ページ" などの既定の文字列値を入力します。 文字列エディターを閉じます。 (コンパイラ エラーを回避するには、既定の文字列が必要です)

  3. インジケーター配列にペインを 追加します。

    MAINFRM.CPP ファイル内にインジケーター配列 を見 つけます。 この配列は、ステータス バーのすべてのインジケーターのコマンド ID を左から右の順で一覧表示します。 配列内の適切な位置で、ペインのコマンド ID を入力します 。ID_INDICATOR_PAGE について、次に示します :

    static UINT indicators[] =
    {
       ID_SEPARATOR,           // status line indicator
       ID_INDICATOR_CAPS,
       ID_INDICATOR_NUM,
       ID_INDICATOR_SCRL,
       ID_INDICATOR_PAGE,
    };
    

ペインにテキストを表示するには、ペインの更新ハンドラー関数で クラス CCmdUISetText メンバー関数を呼び出すやり方を推奨します。 たとえば、現在のページ番号を含む整数変数 m_nPage を設定し、 SetText を使用してペインのテキストをその数値の文字列バージョンに設定することができます。

Note

SetText アプローチをお勧めします。 CStatusBar メンバー関数SetPaneTextを呼び出すことによって、このタスクを少し低いレベルで 実行できます。 それでも、更新ハンドラーが必要です。 このようなペインのハンドラーがない場合、MFC は自動的にペインを無効にし、その内容を消去します。

次の手順では、更新ハンドラー関数を使用してペインにテキストを表示する方法を示します。

ペインにテキストを表示するには

  1. コマンドのコマンド更新ハンドラーを追加します。

    ID_INDICATOR_PAGE についてここに示すように、ハンドラーのプロトタイプを手動で追加します (MAINFRM.H 内):

    afx_msg void OnUpdatePage(CCmdUI* pCmdUI);
    
  2. 適切な .CPP ファイルにおいて、ID_INDICATOR_PAGE についてここに示すようにハンドラーの定義を追加します (MAINFRM.CPP 内):

    void CMainFrame::OnUpdatePage(CCmdUI* pCmdUI)
    {
       pCmdUI->Enable();
       CString strPage;
       strPage.Format(_T("Page %d"), m_nPage);
       pCmdUI->SetText(strPage);
    }
    

    このハンドラーの最後の 3 行は、テキストを表示するコードです。

  3. 適切なメッセージ マップで、ID_INDICATOR_PAGE についてここに示すように ON_UPDATE_COMMAND_UI マクロを追加します (MAINFRM.CPP 内):

    ON_UPDATE_COMMAND_UI(ID_INDICATOR_PAGE, &CMainFrame::OnUpdatePage)
    

m_nPage メンバー変数 (クラス CMainFrame の) の値を定義すると、この手法により、アプリケーションが他のインジケーターを更新するのと同じ方法で、アイドル処理中にページ番号がペインに表示されます。 m_nPage が変更されると、次のアイドル ループ中に表示が変更されます。

さらに詳しい情報

関連項目

MFC でのステータス バーの実装
CStatusBar クラス