VisualC++ の質問です。
CListViewクラスを使っています。
<新規作成>をメニューから選択すると、デフォルトで CWinApp::OnFileNew が
呼び出されるかと思います。マニュアルには「OnFileNewメンバ関数では新しい
文書と、該当するフレームおよびビュークラスを作成します。」とあるのですが、
私のアプリでは Docクラス 及び Viewクラスのデータは生きたままです。
OnFileNewは一体何をやっているのでしょうか?
当面の目的は、<新規作成>を選択した時にDOCクラスを初期化することです。
次のようにオーバーライドしようと思っているのですが、CWinAppクラスからDoc
クラスへのポインタを得るにはどうすればよいのでしょうか?
CMyApp::OnFileNew()
{
Docクラス初期化処理
CWinApp::OnFileNew();
}
また、このようなやり方で正しいのでしょうか?
> マニュアルには「OnFileNewメンバ関数では新しい
> 文書と、該当するフレームおよびビュークラスを作成します。」とあるのですが、
> 私のアプリでは Docクラス 及び Viewクラスのデータは生きたままです。
SDI だとドキュメントの中身だけ消して使いまわしているみたいです。
> OnFileNewは一体何をやっているのでしょうか?
せっかくソースがついているんですから読んでみてください。
> 当面の目的は、<新規作成>を選択した時にDOCクラスを初期化することです。
ドキュメントの初期化なら CDocument::OnNewDocument でやるべきです。
「<新規作成>を選択した時」に間接的にここが呼ばれます。
>ドキュメントの初期化なら CDocument::OnNewDocument でやるべきです。
>「<新規作成>を選択した時」に間接的にここが呼ばれます。
うまくいきました。SDIアプリケーションには始めからOnNewDocument()
メンバ関数がインプリメントされていたようで、
// TODO: この位置に再初期化処理を追加してください。
// (SDI ドキュメントはこのドキュメントを再利用します。)
というコメントまで書いてありました。
見落としていたようです。
kazuma さんご回答ありがとうございました。