ステータス バー ペインのテキストの更新
この記事では、MFC ステータスバーペインに表示されるテキストを変更する方法について説明します。 ステータスバー — クラス—のウィンドウオブジェクトには、 — 複数の "ペイン" が含まれています。各ペインは、ステータスバーの四角形の領域で、情報を表示するために使用できます。 たとえば、多くのアプリケーションでは、右端のウィンドウの CAPS LOCK、NUM LOCK、およびその他のキーの状態が表示されます。 また、多くの場合、アプリケーションでは、左端のウィンドウ (ペイン 0) に情報のテキストが表示されます ("メッセージウィンドウ" と呼ばれることもあります)。たとえば、既定の MFC ステータスバーでは、メッセージペインを使用して、現在選択されているメニュー項目またはツールバーボタンを説明する文字列を表示します。 ステータスバーの図は、アプリケーションウィザードで作成された MFC アプリケーションのステータスバーを示しています。
既定では、ペインの作成時に、MFC はペインを有効にしません CStatusBar 。 ペインをアクティブにするには、ステータスバーの各ペインの ON_UPDATE_COMMAND_UI マクロを使用して、ペインを更新する必要があります。 ペインは WM_COMMAND メッセージを送信しないため (ツールバーボタンのようなものではありません)、手動でコードを入力する必要があります。
たとえば、1つのペインに ID_INDICATOR_PAGE コマンド識別子があり、ドキュメント内の現在のページ番号が含まれているとします。 次の手順では、ステータスバーに新しいウィンドウを作成する方法について説明します。
新しいウィンドウを作成するには
ペインのコマンド ID を定義します。
[ 表示 ] メニューの [ リソースビュー] をクリックします。 プロジェクトリソースを右クリックし、[ リソースシンボル] をクリックします。 [リソースシンボル] ダイアログボックスで、をクリックし
Newます。 コマンド ID 名を入力します (例:)ID_INDICATOR_PAGE。 ID の値を指定するか、[リソースシンボル] ダイアログボックスで提示された値をそのまま使用します。 たとえば、の場合は、ID_INDICATOR_PAGE既定値をそのまま使用します。 [リソースシンボル] ダイアログボックスを閉じます。ペインに表示する既定の文字列を定義します。
リソースビュー開いた状態で、アプリケーションのリソースの種類を一覧表示するウィンドウの [ 文字列テーブル ] をダブルクリックします。 文字列テーブルエディターを開いた状態で、[挿入] メニューの [新しい文字列] をクリックします。 ペインのコマンド ID (たとえば) を選択
ID_INDICATOR_PAGEし、"Page" などの既定の文字列値を入力します。 文字列エディターを閉じます。 (コンパイラエラーを回避するには、既定の文字列が必要です)。インジケーター配列にペインを追加します。
ファイル MAINFRM.CPP にあります。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, };
ペインにテキストを表示するには、 SetText ペインの更新ハンドラー関数でクラスのメンバー関数を呼び出すことをお勧めし CCmdUI ます。 たとえば、現在のページ番号を含む m_nPage 整数変数を設定し、を使用して、 その数値の文字列バージョンにペインのテキストを設定することができます。
注意
この SetText 方法をお勧めします。 メンバー関数を呼び出すことによって、このタスクを少し低いレベルで実行することができ CStatusBarSetPaneText ます。 それでも、更新ハンドラーが必要です。 ペインのハンドラーがないと、MFC はウィンドウを自動的に無効にし、その内容を消去します。
次の手順は、更新ハンドラー関数を使用してテキストをペインに表示する方法を示しています。
ペインにテキストを表示するには
コマンドのコマンド更新ハンドラーを追加します。
(MAINFRM.CPP の) のように、ハンドラーのプロトタイプを手動で追加し
ID_INDICATOR_PAGEます。H):afx_msg void OnUpdatePage(CCmdUI* pCmdUI);適切なで。CPP ファイルで、(MAINFRM.CPP の) のように、ハンドラーの定義を追加し
ID_INDICATOR_PAGEます。CPP):void CMainFrame::OnUpdatePage(CCmdUI* pCmdUI) { pCmdUI->Enable(); CString strPage; strPage.Format(_T("Page %d"), m_nPage); pCmdUI->SetText(strPage); }このハンドラーの最後の3行は、テキストを表示するコードです。
適切なメッセージマップで、(MAINFRM.CPP の) のように ON_UPDATE_COMMAND_UI マクロを追加し
ID_INDICATOR_PAGEます。CPP):ON_UPDATE_COMMAND_UI(ID_INDICATOR_PAGE, &CMainFrame::OnUpdatePage)
M_nPageメンバー変数 (クラス) の値を定義すると 、この手法により、アプリケーションが他のインジケーターを更新するのと同じ方法で、アイドル処理中にページ番号がウィンドウに表示されます。 M_nPage変更されると、次のアイドルループ中に表示が変更されます。