- ベストアンサー
VC++2003SDIでMFCアプリ作成中です。
MFCで自動生成された画面だと、ステータスバーのチェックのON、OFFの切り替えができるようですが、ステータスバーの内容が自動で上書きされます。 ファイルオープンに成功した場合のみ更新したい場合はどうすればよろしいのでしょうか? どこでステータスバーを更新しているかも教えていただけると嬉しいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
更新したいところで、 CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd(); pMain->SetStatusbarMessage(_T("メッセージ")); のようにします。CMainFrameが未定義というエラーが出る場合は、 #include "MainFrm.h" で解消できるはずです。
その他の回答 (4)
- m-take0220
- ベストアンサー率61% (480/785)
間違いではないですが、CWnd*で返ってくると、さらにCStatusBar*にキャストしたりする必要がありますよね。 void CMainFrame::SetStatusbarMessage(LPCTSTR lpszMsg) { m_wndStatusBar.SetPaneText(0, lpszMsg); } みたいにしたほうが楽じゃないですか?
- m-take0220
- ベストアンサー率61% (480/785)
> 基本ステータスバーを更新し 誰がどう更新するのですか? > もし、ファイルオープンに失敗したときは前回の表示を残す 「前回の表示」とは?
補足
先ほどのは考え間違いです。 すいません、気にしないでください。 こういうことでしょうか? CWnd* CMainFrame::GetMessageBar() { return NULL; } CWnd* CMainFrame::MyGetMessageBar() { // 通常のGetMessageBar()の処理 return GetDescendantWindow(AFX_IDW_STATUS_BAR, TRUE); } 更新したい場所(クラス)で、 CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd(); pMain->MyGetMessageBar(); でいいのでしょうか?
- m-take0220
- ベストアンサー率61% (480/785)
> おっしゃるとおりにやってみましたが、思い通りの操作になりませんでした。 思い通りの動作とどのような違いがあるのかを書かないと、わかりませんよ。 ファイルオープンに成功してもステータスバーが更新されないのであれば、MFCのフレームワークからの操作を受け付けないようにしたのだから当然です。必要な時にステータスバーを更新するコードを書かなくてはいけません。 ステータスバーはCMainFrameのメンバとして保持されています。別のクラスから操作する必要がある場合には、 CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd(); のようにします。ただし、そのままではステータスバーはprotecedメンバなので操作できません。 ステータスバーをpublicメンバにするか、ステータスバーを更新する関数をCMainFrameのpublicなメンバ関数として定義してそれを呼び出す必要があります。
補足
やり方として、基本ステータスバーを更新し、もし、ファイルオープンに失敗したときは前回の表示を残すというやりかたにしたいのですが、それは可能でしょうか?
- m-take0220
- ベストアンサー率61% (480/785)
MFCによるステータスバーの最初のペインの更新をやめたいのであれば、CMainFrameクラスに virtual CWnd* GetMessageBar() を作成して、関数の中身を return NULL; にします。
補足
おっしゃるとおりにやってみましたが、思い通りの操作になりませんでした。 ファイルが開いたときだけステータスバーが更新されるようにしたいです・・・
補足
すいません、それはどのように使って更新すればいいのでしょうか?