MFC SDI でのビューの表示・非表示切り替え

[戻る]
たかぎ 2005/05/10(火) 20:42:23
開発環境 VC++6.0 MFC SDI WindowsXP

SDI でビューの非表示・表示の切り替えを行おうとしているのですが、エラーになっていまい
ます。
MDIプログラムでないと非表示・表示の切り替えは行えないのでしょうか?

ちなみに
ビューを削除してから、また違うビューを作成するアルゴリズムは上手くいきました。

BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT /*lpcs*/,
    CCreateContext* pContext)
{


    // 分割ウィンドウを作成します
    CRect cr;    
    BOOL rc;    
    if (!m_wndSplitter.CreateStatic(this,1,2)){// 1行2列のビューを作成
        TRACE0("Failed to create split bar ");        
        return FALSE; // failed to create    
    }

    GetClientRect(&cr);    // ウィンドウの幅を取得
    CSize paneSize(cr.Width()/4, cr.Height());
    CSize paneSize1(3*cr.Width()/4, cr.Height());
    ((CCADExplorerApp*)AfxGetApp())->m_pDoc=(CCADExplorerDoc*)(pContext-
>m_pCurrentDoc);
    pContext->m_pCurrentFrame=this;
    rc=m_wndSplitter.CreateView(0, 0,pContext->m_pNewViewClass,paneSize, 
pContext);
    if(!rc)return FALSE;

    pContext->m_pNewViewClass=RUNTIME_CLASS(CCADExplorerView);
    pContext->m_pCurrentDoc=((CCADExplorerApp*)AfxGetApp())->m_pDoc;
    pContext->m_pCurrentFrame=this;
    rc=m_wndSplitter.CreateView(0,1,pContext-
>m_pNewViewClass,paneSize1,pContext);

    m_wndSplitter.RecalcLayout();    
    m_wndSplitter.SetActivePane(0,1);
    return rc;
}



void CMainFrame::OnSwitchSearchView() 
{
    //左側画面 検索
    CRect cr;    
    GetClientRect(&cr);    
    CSize paneSize1(cr.Width()/4, cr.Height());
    CCreateContext Context;    
    Context.m_pNewViewClass=RUNTIME_CLASS(SearchView);
    Context.m_pCurrentDoc=((CCADExplorerApp*)AfxGetApp())->m_pDoc;
    Context.m_pCurrentFrame=this;
    Context.m_pNewDocTemplate=Context.m_pCurrentDoc->GetDocTemplate();
    Context.m_pLastView=(CFormView*)m_wndSplitter.GetPane(0,1);
    m_wndSplitter.DeleteView(0, 0);
    m_wndSplitter.CreateView(0, 0,RUNTIME_CLASS(SearchView),paneSize1, 
&Context);
    SearchView *pView=(SearchView*)m_wndSplitter.GetPane(0,0);
    pView->GetParentFrame()->RecalcLayout();    
    m_wndSplitter.RecalcLayout();
    pView->OnInitialUpdate();     
    m_wndSplitter.SetActivePane(0,0);    
}

水の 2005/05/10(火) 21:29:34
同じフレームワークに重ねて複数ビューを表示できるかという事ですか?

たかぎ 2005/05/10(火) 21:48:32
水のさん
そのとおりです。

何か良い方法ありませんか?

yank 2005/05/10(火) 22:37:01
splitterのpaneの表示切り替えならここにサンプルが

http://www.codeguru.com/Cpp/W-D/splitter/

たかぎ 2005/05/10(火) 23:50:25
yankさん ありがとうございます。

しかし、サンプルが多すぎてどれなのかわかりません。

みみませんが、どのページか教えて頂けませんか?

yank 2005/05/11(水) 03:13:16
何がしたいのか、いまいち文面からはわかりません

splitterで画面を分割して 表示/非表示 したいならこれ

http://www.codeguru.com/Cpp/W-D/splitter/article.php/c1543/


エクスプローラーやIEみたいな感じにしたいなら
splitterじゃ無くて、ControlBarにした方がいいんじゃないの

wood 2005/05/11(水) 07:12:26
MSのサンプルでVSWAP32と言うサンプルをお勧めしてます
が分割ウィンドウは使ってません

たかぎ 2005/05/11(水) 09:59:01
本当にどうしようもない初心者です。
VSWAP32のサンプルは何処で入手可能ですか?
ググっても見つかりませんでした。

wood 2005/05/11(水) 12:27:00
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q141334
又は、MSDNお持ちあれば、CDの中にあるはずです

wood 2005/05/11(水) 15:16:52
ここの過去ログ「VSWAP32」をキーワードに検索してみてください
良い面・悪い面の解説や、カストマイズポイントなど参考になると思います

たかぎ 2005/05/12(木) 10:40:36
[[解決]]
woodさま ありがとうございました。
無事できました。

古いスレッドには追加発言できません。