2011-02-17 84 views
2

Visual Studioで開発したMFC MDIアプリケーションがタブ付きのインターフェイスを持っています。タブグループ内で非ドキュメントビューであるビューを開くことができます。つまり、関連付けられているドキュメントがなく、保存する必要はありません。非モーダルダイアログのように動作しますが、タブ付きです。 [これらのウィンドウは単に情報を表示してコマンドを実行するだけです]MFC MDIタブ付きアプリケーション - 非ドキュメントウィンドウをタブグループに追加したい

MDIアプリケーションの内部機構は、関連するウィンドウとともにDocTemplate - Document - Frame - Viewオブジェクト構造を扱うようになっています。

Q1)誰かがこのようなウィンドウを作成し、既に確立されているMDIタブグループに追加する方法に関するアイディアを得ましたか?私は、リッチエディットウィンドウを作成しようとしたとし、それを追加しました:

// m_wndListingView will be a non-editable CRichEditCtrl 

m_wndListingView->Create(WS_CHILD | WS_VISIBLE | ES_WANTRETURN | WS_VSCROLL | 
    WS_HSCROLL | ES_MULTILINE | ES_LEFT | ES_AUTOHSCROLL | ES_SAVESEL |ES_READONLY, 
    CRect(0, 0, 20, 20), pMainFrame, 1234); 

// get Tab control and add a new tab 

CMFCTabCtrl *mm_wndTabCtrl = &pMainFrame->GetMDITabs(); 
mm_wndTabCtrl->AddTab (m_wndListingView, _T("LISTING")); 

これが作成され、ウィンドウを表示..しかし、それはタブグループに追加されませんでした。

Q2)タブグループに適切に表示されたウィンドウ(おそらくフレームウィンドウである必要があります)を取得できた場合、ユーザーがそれを閉じるときに、 appを使用してドキュメントを保存するよう促しますか?おそらく、私は 'OnClose'メソッドをオーバーロードできますが、ドキュメントが存在しないため、document :: OnClose()はできません。あなたの豊かな編集をホストにフレームとビューを作成する必要があります任意のアイデアを

おかげで、 CAS

答えて

0

。これは文書なしで行うことができます。ビューは(pMainFrameではなく)リッチエディットの親になります。これらの行(警告、テストされていない)に沿って

何か:

 CFrame* pFrame = (Crame*)RUNTIME_CLASS(CFrame)->CreateObject(); 
     CCreateContext context; 
     context.m_pNewViewClass = RUNTIME_CLASS(CView); 
     context.m_pCurrentDoc = NULL; 
     context.m_pCurrentFrame = NULL; 
     context.m_pLastView = NULL; 
     context.m_pNewDocTemplate = NULL; 

     // NOTE: create IDR_SOMERESOURCE string (for tab title), menu, etc as needed 
     BOOL frameLoaded = pFrame->LoadFrame(IDR_SOMERESOURCE, WS_OVERLAPPEDWINDOW, pMainFrame, &context); 
     if (frameLoaded) 
      Frame->InitialUpdateFrame(NULL, TRUE); 

      // now create your rich edit with the view as its parent 
+0

私はこれをチェックアウトします。 [今までは、私は新しいdoc/viewペアで同じフレームを使いました...そして、私はOnOpen()やOnClose()などの 'ドキュメント'アクティビティを正しく処理しなければなりませんでした。どうも –

関連する問題