次の方法で共有


Status-Bar ペインのテキストの更新

この記事では、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 など) を選択し、"Page" などの既定の文字列値を入力します。 文字列エディターを閉じます。 (コンパイラ エラーを回避するには、既定の文字列が必要です)。

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

    MAINFRM.CPP ファイル内の インジケーター 配列を探します。 この配列は、ステータス バーのすべてのインジケーターのコマンド ID を左から右の順に一覧表示します。 配列内の適切なポイントで、 ID_INDICATOR_PAGEの次に示すように、ウィンドウのコマンド ID を入力します。

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

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

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 (MAINFRM.CPP 内) に示すように、ON_UPDATE_COMMAND_UI マクロを追加します。

    ON_UPDATE_COMMAND_UI(ID_INDICATOR_PAGE, &CMainFrame::OnUpdatePage)
    

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

詳しく知りたいこと

こちらも参照ください

MFC でのステータス バーの実装
CStatusBar Class