MDIウインドウを明示的に作成する – プログラミング – Home

MDIウインドウを明示的に作成する
 
通知
すべてクリア

[解決済] MDIウインドウを明示的に作成する


sizuku
 sizuku
(@sizuku)
ゲスト
結合: 17年前
投稿: 5
Topic starter  

現在、MFCでMDIアプリケーションを作成しています。
トップメニューのファイルから新規作成を選ぶと
新しいMDIウインドウを作成することができますが、
このウインドウの作成をプログラムから明示的に行いたいと考えています。
現状では、WM_COMMANDをID_FILE_NEWとしてポストするという形で実装していますが、
この他に何か方法はあるのでしょうか。


引用未解決
トピックタグ
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

CWinApp::OnFileNew() で良いのでは?
protectedだから、呼び出す場所によっては、スコープを広げる必要があるけど。


返信引用
玲音 (st.lain)
 玲音 (st.lain)
(@玲音 (st.lain))
ゲスト
結合: 17年前
投稿: 89
 

CDocTemplate::CreateNewFrame()を明示的に呼び出す、ということカナ。
既存のドキュメントに対して新規にフレームを割り当てるなら以下のように
すればよかったかと思います。
(ドキュメントが異なる場合は、CreateNewDocument()が必要のはず)

CDocument* pDoc = static_cast<CHogeApp*>(AfxGetApp())->GetDocument();
ASSERT(pDoc != NULL);

CChildFrame* pChild = static_cast<CChildFrame*>(pDoc->GetDocTemplate()-
>CreateNewFrame(pDoc, NULL));

たいちうさんの書かれているとおり、OnFileNew()で十分だと思っています。


返信引用
玲音 (st.lain)
 玲音 (st.lain)
(@玲音 (st.lain))
ゲスト
結合: 17年前
投稿: 89
 

追加補足&訂正です。

> CDocument* pDoc = static_cast<CHogeApp*>(AfxGetApp())->GetDocument();
普段、シングルドキュメントに対するマルチビューをやっていたので、
勘違いしていました。

CDocument自体はCWinApp派生から直接持ってくることはできません。
追加されたドキュメントテンプレートを回すなり、(存在するなら)アクティブな
ビューから直接ドキュメントを持ってくるなり、して下さい。

# 結局、ドキュメントテンプレートのCreateNewFrame()をコールするだけならば
# CDocument*が不必要ですが。

CWinApp::InitInstance()でドキュメントテンプレートを追加するので、その
ポインタをメンバとして再利用するのも手かと思います。
(その場合は、メモリ違反にだけは注意してください)


返信引用
sizuku
 sizuku
(@sizuku)
ゲスト
結合: 17年前
投稿: 5
Topic starter  

レスありがとうございます。
OnFileNewでいこうかと思いますが、
ドキュメントテンプレートの方も面白そうなので試してみたいと思います。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました