Viewクラスからファイルを開くには?

[戻る]
Baby Chicken 2009/05/21(木) 16:34:43
度々申し訳ありません。
Visual Studio 2008 Standard on Windows Vista BusinessでMFC SDI (UNICODE)を用い
ています。
View classのOnCharメッセージで例えば
if (cChar == 'o') {
  // ここでDocument classのSerializeと同等のことをしたい
}
と考えました。
pDoc->Serialize()
あるいは
pDoc->OnOpenDocument()
としても、未だ特定していないarが引数として必要です。何を呼び出せば、ファイルを
開くダイアログを呼び出せるのでしょうか?
本当に初歩的な質問だと思いますが、宜しくご指導お願いします。

bun 2009/05/21(木) 17:15:08
要するに、普通にメニュー[ファイル - 開く]を選択したのと同じことをしたいのかな?
やり方は複数あります。

まず、実際にメニューを呼び出す方法です。
リソースビューで、[ファイル - 開く]メニューのリソースIDを調べると、
  ID_FILE_OPEN
だと分かります。
で、メインメニューは、メインフレームが管理していますから、
  AfxGetMainWnd()->PostMessage(WM_COMMAND, ID_FILE_OPEN);
でOKです。

もう一つは、メニュー選択した結果、呼ばれる関数を直接呼んででしまう方法です。
Serialize()という関数が分かっているようですから、
まず、Serialize()関数内にブレークポイントを貼って停止させます。
で、呼び出し履歴をたどると、選択されたメニューを解析した後に最初に呼ばれている
関数は、
  CWinApp::OnFileOpen()
だと分かります。
よって、
  AfxGetApp()->OnFileOpen();
でも同じ結果が得られます。

このあたりは慣れです。

maru 2009/05/21(木) 19:11:28
何をやりたいのかはっきりしない質問だなぁ。

>  // ここでDocument classのSerializeと同等のことをしたい
「同等のこと」とは?
同等ではなくSerializeを呼び出したいなら、引数となるCArchiveオブジェクトを
自分で作成すればよい。

そのCArchiveオブジェクトを作成するために、
> 何を呼び出せば、ファイルを開くダイアログを呼び出せるのでしょうか?
を聞いているのならば、CFileDialog を使えばよい。

で、本当にやりたいのは bun さんが回答している通り、「メニュー[ファイル - 
開く]を選択したのと同じこと」ではないのかな?

Baby Chicken 2009/05/21(木) 20:36:20
[[解決]]
bun様
ご指導ありがとうございます。呼び出し履歴をたどる、ということまで教えて頂き、あ
りがとうございます。

maru様
質問の仕方が要領得なくて申し訳ありませんでした。まだ質問の仕方も分からないので
す。貴重な時間を取って頂き、すみませんでした。

古いスレッドには追加発言できません。