重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

Vd++6.0 MFC。

MDIにてプログラムを作成しているのですが、
親ウィンドウにはステータスバーがついているのですが、
子ウィンドウにはついていません。

子ウィンドウごとにそれぞれのステータスを表示しようと思っているのですが、
ステータスバーを作成する方法がわかりません。

そなたか、ご存知の方宜しくお願い致します。

足りない部分は補足させていただきます。

A 回答 (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から自分好みに
完全アレンジするという手もありますが、ビューの描画領域の
再計算等を全て自分で実装しなければならなくなります。
要するに結論:一応同じものは実現できますが(同じ過ぎて
むしろ気味が悪い)、親ウィンドウのステータスバーがそもそも
変だということで考えておいて下さい。
    • good
    • 0
この回答へのお礼

ありがとうございました。
仰る通りなんか変ですね。
普通のままにしておきます。

大変助かりました。
また、宜しくお願い致します。

お礼日時:2002/06/11 19:51

子ウィンドウのフレームを「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);
}



てな感じ。でもあまりやらないと思う、
以上です。
    • good
    • 0
この回答へのお礼

ありがとうございました。
作成することが出来ました。

作成できたのですが、
立体的なステータスバーになってしまいました。
(親ウィンドウのようなものではなく、凹んだ感じの物)

これを、親ウィンドウと同じようなステータスバーに
するためには、どのように行ったらよいのでしょうか?

ご存知であれば、教えていただけませんでしょうか。
よろしくお願いします。

お礼日時:2002/06/06 14:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!