【Visual C++ 2008】【MFC】
ステータスバークラス(CStatusBar)を使用して、ダイアログにステータスバーを実装する方法。
- ステータスバーに任意の文字列を表示する
- サイズ変更可能なダイアログの場合、右下に斜線が入る
が可能になる。
(1)
ダイアログのクラスヘッダのprivateに、ステータスバーと高さのメンバ変数定義を追加する。
ただし、ダイアログのサイズを変更しない場合は、高さのメンバ変数は不要。
// ステータスバー
CStatusBar m_wndStatusBar;
// ステータスバーの高さ
LONG heightStatusBar;
(2)
OnInitDialogの「// TODO: 初期化をここに追加します。」より後にて、ステータスバーを読み込む。
if (!m_wndStatusBar.Create(this))
{
// ステータスバー作成失敗
//
//
//
return TRUE;
}
// ステータスバーのインジケータ設定
// (ステータスバーに文字列を表示しない場合、インジケータ設定は不要)
static UINT idArray[] =
{
ID_SEPARATOR
};
m_wndStatusBar.SetIndicators(idArray, _countof(idArray));
// ステータスバーの高さ取得
// CRectクラスのメンバ変数bottomに高さが入っている
// (ダイアログのサイズを変更しない場合、heightStatusBarに代入不要)
CRect rectStatusBar;
m_wndStatusBar.GetWindowRect(&rectStatusBar);
heightStatusBar = rectStatusBar.bottom;
// ダイアログのサイズを取得
CRect rectDialog;
GetClientRect(&rectDialog);
// ダイアログの一番下にステータスバーを表示
// (ダイアログのサイズを変更しない場合、heightStatusBarの代わりにrectStatusBar.bottomを使用)
m_wndStatusBar.MoveWindow(0, rectDialog.bottom - heightStatusBar,
rectDialog.Width(), heightStatusBar);
(3)
ステータスバーに文字列を表示するには、以下の通り。
m_wndStatusBar.SetWindowText(CString文字列);
(4)
サイズ変更可能なダイアログの場合、CWnd::OnSizeをオーバーライドする。
詳しくは
「リストビューのサイズをダイアログのサイズ変更に合わせる」
を参照のこと。
void CXxxxDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// OnSizeは、OnInitDialog前に一度呼ばれる。
// その時点では、ステータスバーのウィンドウハンドルはNULLである。
if (IsWindow(m_wndStatusBar.GetSafeHwnd()))
{
// ダイアログに合わせてステータスバーの位置変更。
// ここで、heightStatusBarを使用する。
m_wndStatusBar.MoveWindow(0, cy - heightStatusBar, cx, heightStatusBar);
}
return;
}
(メモ)
- MSDNライブラリの「CStatusBar」「CRect」「CWnd::GetWindowRect」「CWnd::GetClientRect」 「CWnd::MoveWindow」「CWnd::SetWindowText」「CWnd::OnSize」「IsWindow」「CWnd::GetSafeHwnd」 を参照のこと