1

スプリッター付きのメインフレームがあります。左側には (想像上の名前の) CAppView_Left があり、右側には CAppView_Right_1 と CAppView_Right_2 があります。次のコードを使用して、2 つの主要なビューを正しく初期化します。

if (!m_wndSplitter.CreateStatic(this, 1, 2))
{
    TRACE0("Failed to CreateStaticSplitter\n");
    return FALSE;
}
else 
if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CAppView_Left), CSize(300, 200), pContext))
{
    TRACE0("Failed to create left pane\n");
    return FALSE;
}
else 
if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CAppView_Right_1), CSize(375, 200), pContext))
{
    TRACE0("Failed to create first right pane\n");
    return FALSE;
}

...

私がやりたいのは、右のフレーム内に 2 番目のビューを作成することですが、これを追加しようとすると:

if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CAppView_Right_2), CSize(375, 200), pContext))
{
    TRACE0("Failed to create first right pane\n");
    return FALSE;
}

VS はコンパイルされますが、アプリケーションの実行に失敗し、ビューが既に定義されていることを示す例外が発生します。

誰かがこれを行う方法を提案できますか? また、ビューまたはドキュメント クラスからビューを切り替える方法は?

4

3 に答える 3

1

必要なものを達成するのに役立つ CodeProject の記事があります。

http://www.codeproject.com/KB/splitter/usefulsplitter.aspx

以前にスプリッターのビューを置き換えたことがあるので、上記が役に立たない場合は、独自のコードをいくつか投稿します。

于 2008-10-13T17:14:48.160 に答える
0

ビューを切り替えるには、代わりに別のビューを作成する前に、明示的に DeleteView する必要があります。

交換可能なビューの状態を保持する必要がある場合は、ビューがドキュメントから状態を初期化できるようにすることをお勧めします。いずれかのビューを削除してから再作成するまでの間に必要な状態でドキュメントを更新するように注意してください。

于 2008-10-13T17:32:14.053 に答える
0

2 つ目の右側のビューを作成することはできません。

m_wndSplitter.CreateStatic(this, 1, 2) 

は 2 つの列のみを作成しました。これを次のように変更できます

m_wndSplitter.CreateStatic(this, 1, 3)

2番目の右側のビューをに変更します

if (!m_wndSplitter.CreateView(0, 2, RUNTIME_CLASS(CAppView_Right_2), CSize(375, 200), pContext))
{    
TRACE0("Failed to create first right pane\n");   
 return FALSE;
}

これにより、それぞれ別のビューを持つ 3 つの列が作成されます。既存のビューの 1 つを分割する追加の分割ウィンドウを作成することもできます。

m_wndSplitter2.CreateStatic(m_View2, 2, 1)

m_view2 は 2 番目のビューでした

于 2008-10-13T16:14:22.273 に答える