首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于动态分割视图的有关问题,搞定马上结帖!

2012-02-24 
关于动态分割视图的问题,搞定马上结帖!~我用m_MySplitterWnd.DeleteView(0,1)删除一个窗口后再创建时它并

关于动态分割视图的问题,搞定马上结帖!~
我用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
[解决办法]
恭喜楼主,顺便蹭点分啊.呵.

热点排行