1

私は必ずしもコードのヘルプを探しているわけではありませんが、解決策を自分で調査できるように高レベルの回答を探しています。基本的に、私は複数のドキュメントとそのビューを持つ MDI アプリを持っています。私が持っている 1 つの子フレームですべてのビューをタブとして開きたいと思います。問題は、私の子フレームが OnCreateClient メソッドでフォームとリスト ビューの 2 つのビューを持つ分割ウィンドウで静的に構成されていることです。アプリを起動したときに表示されるデフォルトのタブとしてこれを維持したいと思います。

独自のドキュメント テンプレートを含む 3 番目のビュー (editview) があり、別のタブとして開くことができるようにしたいと考えています。このように動作する他のビューがあります。これにアプローチする最良の方法は何ですか?

ビューごとに個別の子フレームを作成する必要がありますか? 別の子フレームを作成すると、「タブ」機能が失われますか?

または、子フレームの OnCreateClient メソッドを変更して、どのドキュメント テンプレートが現在のドキュメント テンプレートであるかをテストし、そのドキュメント テンプレートのビューを作成する必要がありますか? ベテランのプログラマーの何人かがそれをどのように行ったか、または行うかを知りたいです。

ありがとう。

4

1 に答える 1

0

これが他の人に役立つ場合、私が収集したものから、 CChildFrame から派生した新しい子フレーム クラスを作成するか、それを新しいビューでフレームとして使用することは完全に受け入れられます。ドキュメント、フレーム、およびビューは、initInstance メソッドでドキュメント テンプレートに追加されます。たとえば、トリオのペア (2 つのドキュメント、2 つのビュー、2 つのフレーム) があるとします。

pDocTemplate = new CMultiDocTemplate(IDR_testappTYPE,
    RUNTIME_CLASS(CMydoc1),
    RUNTIME_CLASS(CMyframe1), 
    RUNTIME_CLASS(CMyview1));
if (!pDocTemplate)
    return FALSE;
AddDocTemplate(pDocTemplate);

pDocTemplate2 = new CMultiDocTemplate(IDR_testappTYPE,
    RUNTIME_CLASS(CMydoc2),
    RUNTIME_CLASS(CMyframe2), 
    RUNTIME_CLASS(CMyview2));
if (!pDocTemplate2)
    return FALSE;
AddDocTemplate(pDocTemplate2); 

この新しいフレームが上記のようなスプリッターを使用しないために別の子フレームを持つ別のトリオを追加する場合は、この方法で行います。

pDocTemplate3 = new CMultiDocTemplate(IDR_mditest3TYPE,
    RUNTIME_CLASS(CMydoc), //same doc
    RUNTIME_CLASS(CMyframeWithoutSplitters), //new frame
    RUNTIME_CLASS(CMyview3)); //new view
if (!pDocTemplate3)
    return FALSE;
AddDocTemplate(pDocTemplate3); 
于 2012-11-14T23:09:09.220 に答える