0

CreateStatic と CreateView を使用して、「C(classname)View」を多くのペイン ((1x2)、(3x3) など) に分割し、ボタン コントロールを使用して行と列の数を選択しました。

ここで、1x1 をクリックすると (ペインを削除することを意味します)、CSplitterWnd::CreateStatic 内で ASSERT(n_Row > 1 && n_Col > 1) が明らかに失敗します。

「ペインなし」の状況をどのように処理しますか?

これは DisplaySingleFrame() 関数です (ペインを削除します)

CN00bSplitApp* pApp = (CN00bSplitApp*)AfxGetApp();
CView * pActiveView = NULL;

if(pActiveView == NULL)
{
if(m_pSplitter)
    pActiveView = (CView*)m_pSplitter->GetPane(0,0);
        else
    pActiveView = (CN00bSplitView *)GetActiveView();
}

m_iPrevColLayout = m_iRowLayout;
m_iPrevRowLayout = m_iColLayout;

m_iRowLayout = 0;
m_iColLayout = 0;

ShowWindow(SW_HIDE);

CRect rect(0,0,0,0);
pActiveView->GetClientRect(rect);
CDocument * pDoc= pActiveView->GetDocument();

pActiveView->DestroyWindow();

pActiveView = NULL;

if(m_pSplitter)
{
m_pSplitter->DestroyWindow();
delete m_pSplitter;
m_pSplitter = NULL;
}

CDocTemplate* pDocTemplate = pApp->m_pDocTemplate;

CCreateContext context;

context.m_pNewViewClass= RUNTIME_CLASS(CN00bSplitView);
context.m_pCurrentDoc=(CN00bSplitDoc*)pDocTemplate->CreateNewDocument();
context.m_pLastView=pActiveView;

CView* p = (CView*)CreateView(&context, AFX_IDW_PANE_FIRST);
SetActiveView(p);

p->OnInitialUpdate();

RecalcLayout();
ShowWindow(SW_SHOW);

これにより、「context.m_pCurrentDoc=(CN00bSplitDoc*)pDocTemplate->CreateNewDocument();」で未処理の例外がスローされます。

4

1 に答える 1

0

m_pDocTemplate=pDocTemplateの InitInstance で初期化していませんでしたC(classname)App

問題を解決します。

于 2012-05-11T09:23:37.133 に答える