关于动态分割视图的问题,搞定马上结帖!~
我用m_MySplitterWnd.DeleteView(0, 1); 删除一个窗口后再创建时
它并没有调用OnInitialUpdate是什么原因。。。
我在OnInitialUpdate里初始化了一个list 它并没有显示出来
CWnd *pView=m_MySplitterWnd.GetPane(0,1);
if (pView==NULL)
return;
CRuntimeClass *pViewClass = NULL;
if (pView-> IsKindOf(RUNTIME_CLASS(CYZJDataDailyDialog)))
{
pViewClass = RUNTIME_CLASS(CYZJDataInfoDialog);
}
else
return;
CRect rect;
pView-> GetWindowRect(&rect);
m_MySplitterWnd.DeleteView(0, 1);
CCreateContext context;
context.m_pCurrentDoc = GetActiveDocument();
context.m_pCurrentFrame = this;
context.m_pLastView = NULL;
context.m_pNewDocTemplate = NULL;
context.m_pNewViewClass = pViewClass;
if (!m_MySplitterWnd.CreateView(0, 1, pViewClass, rect.Size(), &context))
ASSERT(FALSE);
m_MySplitterWnd.RecalcLayout();
[解决办法]
手动调用。
[解决办法]
首先你要了解OnInitialUpdate是什么情况下调用的,你重建View时pContext传个NULL指针就可以了
BOOL CSplitterWnd::CreateView(int row, int col,
CRuntimeClass* pViewClass, SIZE sizeInit, CCreateContext* pContext)
{
...
BOOL bSendInitialUpdate = FALSE;
CCreateContext contextT;
if (pContext == NULL)
{
CView* pOldView = (CView*)GetActivePane();
if (pOldView != NULL && pOldView-> IsKindOf(RUNTIME_CLASS(CView)))
{
// set info about last pane
ASSERT(contextT.m_pCurrentFrame == NULL);
contextT.m_pLastView = pOldView;
contextT.m_pCurrentDoc = pOldView-> GetDocument();
if (contextT.m_pCurrentDoc != NULL)
contextT.m_pNewDocTemplate =
contextT.m_pCurrentDoc-> GetDocTemplate();
}
pContext = &contextT;
bSendInitialUpdate = TRUE;
}
...
if (bSendInitialUpdate)
pWnd-> SendMessage(WM_INITIALUPDATE);
[解决办法]
mark
[解决办法]
恭喜楼主,顺便蹭点分啊.呵.