- ベストアンサー
MFC MDIでステータスバーの追加。
Vd++6.0 MFC。 MDIにてプログラムを作成しているのですが、 親ウィンドウにはステータスバーがついているのですが、 子ウィンドウにはついていません。 子ウィンドウごとにそれぞれのステータスを表示しようと思っているのですが、 ステータスバーを作成する方法がわかりません。 そなたか、ご存知の方宜しくお願い致します。 足りない部分は補足させていただきます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
------------------CPP------------------ // MainFrame.cpp のグローバル変数 indicators と同じもの static UINT IDArray[] = { ID_SEPARATOR, // ステータス ライン インジケータ ID_INDICATOR_KANA, ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください m_bar.Create(this); // CMainFrame::OnCreate() 内と同様の処理 m_bar.SetIndicators(IDArray, sizeof(IDArray)/sizeof(UINT)); // ↓メインウィンドウのステータスバーからペインスタイルのコピー int nIndex; // ペインインデックス UINT nID; // ペインインジケータID UINT nStyle; // ペインスタイル int cxWidth; // ペイン幅 for(nIndex = 0; nIndex < sizeof(IDArray)/sizeof(UINT); nIndex++) { ((CStatusBar*)GetMessageBar())->GetPaneInfo(nIndex, nID, nStyle, cxWidth); m_bar.SetPaneInfo(nIndex, nID, nStyle, cxWidth); } // ↑ここまで return CMDIChildWnd::OnCreateClient(lpcs, pContext); } ペインのインジケータIDが ID_SEPARATOR のときに凸の 状態のペインになるらしいです。独自の設定にする場合は CStatusBar::SetPaneInfo()等を使用して下さい。 ただ、MFCのMDIやSDIはステータスバー・メニュー 等に、独自の内部処理がデフォルトで入っているので( CStatusCmdUIなる内部クラスが管理する)、MFCの 標準の画面設計と少し異なる方法を取りたい場合は注意が 必要です(といってもどうしようも無いが) APIの CreateStatusWindow() を使用して1から自分好みに 完全アレンジするという手もありますが、ビューの描画領域の 再計算等を全て自分で実装しなければならなくなります。 要するに結論:一応同じものは実現できますが(同じ過ぎて むしろ気味が悪い)、親ウィンドウのステータスバーがそもそも 変だということで考えておいて下さい。
その他の回答 (1)
子ウィンドウのフレームを「CChildFrame」とすると ------------------ヘッダー------------------ class CChildFrame : public CMDIChildWnd { ~(中略)~ public: CStatusBar m_bar; ~(中略)~ }; ------------------CPP------------------ BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください m_bar.Create(this); // ←ココ追加 return CMDIChildWnd::OnCreateClient(lpcs, pContext); } てな感じ。でもあまりやらないと思う、 以上です。
お礼
ありがとうございました。 作成することが出来ました。 作成できたのですが、 立体的なステータスバーになってしまいました。 (親ウィンドウのようなものではなく、凹んだ感じの物) これを、親ウィンドウと同じようなステータスバーに するためには、どのように行ったらよいのでしょうか? ご存知であれば、教えていただけませんでしょうか。 よろしくお願いします。
お礼
ありがとうございました。 仰る通りなんか変ですね。 普通のままにしておきます。 大変助かりました。 また、宜しくお願い致します。