想在原有程序上,添加拆分窗口的功能,
但原程序有几个派生类,不知道从哪里添加了。//主窗口类
//成员  CTabViewContainer m_wndTab;
//重载 CMainFrame::OnCreateClient(...) 函数
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
// TODO: Add your specialized code here and/or call the base class
if (!m_wndTab.Create(WS_BORDER|WS_CHILD|WS_VISIBLE|TCS_TABS|TCS_HOTTRACK,
CRect(0,0,0,0),this,AFX_IDW_PANE_FIRST))
{
TRACE0("Failed to create tab\n");
return FALSE ;
}
m_wndTab.ModifyStyle(0,WS_EX_CLIENTEDGE) ; pContext->m_pNewViewClass = RUNTIME_CLASS(CCaptureView) ;
m_wndTab.AddView(_T("数据列表"),pContext->m_pNewViewClass,pContext) ;
         //添加一个视图,CTabViewContainer 派生自 CTabCtrl,产生一个有容器性质的窗口
         //CCaptureView 派生自 CWnd return TRUE;
}// 派生类 class CTabViewContainer : public CTabCtrl
BOOL CTabViewContainer::AddView(LPCTSTR pszText, CRuntimeClass *pRT, CCreateContext *pContext, int nImage )
{ int nIndex = this->GetItemCount() ;
CSize sz(40,20) ;
this->SetItemSize(sz) ;
TCITEM tci ;
tci.mask = TCIF_TEXT|TCIF_PARAM ;

if (nImage!= -1)
tci.mask |= TCIF_IMAGE ;
CWnd* pView = (CWnd*)pRT->CreateObject() ;
pView->CreateEx(WS_EX_CLIENTEDGE,NULL,NULL,WS_CHILD|WS_VISIBLE,
CRect(0,0,0,0),this,nIndex,pContext) ;

tci.pszText = (char*)pszText ;
tci.lParam = (DWORD) pView ;
tci.iImage = nImage ;
this->InsertItem(nIndex,&tci) ;
return TRUE ;
}//派生类 class CCaptureView : public CWnd
//成员 CSplitterWndEx m_wndSplitter; //拆分窗口
int CCaptureView::OnCreate(LPCREATESTRUCT lpCreateStruct) //在OnCreate函数中实现拆分功能
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: Add your specialized creation code here CCreateContext* pContext = (CCreateContext*)lpCreateStruct->lpCreateParams;{
m_wndSplitter.CreateStatic( this,1,2) ;
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CCaptureView),CSize300,0),pContext) ;
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CCaptureView),CSize(0,0),pContext) ;
} // 这里报错!!
return 0;
}----------------------------------
虽然能够在 CMainFrame::OnCreateClient 中实现窗口的拆分而我在书上看到的例子是在 CCaptureView::OnCreate 中实现的,结果尝试了半天,虽然能够编译,但程序报错无法运行。
请问一下,如果要在 CCaptureView::OnCreate 中实现窗口的拆分,应该如何去做呢?

解决方案 »

  1.   

    http://www.vckbase.com/code/listcode.asp?mclsid=5&sclsid=507
      

  2.   

    如果在 CMainFrame::OnCreateClient 中实现 拆分窗口
    //添加成员 CSplitterWnd m_wndSplitter
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if (!m_wndTab.Create(WS_BORDER|WS_CHILD|WS_VISIBLE|TCS_TABS|TCS_HOTTRACK,
    CRect(0,0,0,0),this,AFX_IDW_PANE_FIRST))
    {
    TRACE0("Failed to create tab\n");
    return FALSE ;
    }
    m_wndTab.ModifyStyle(0,WS_EX_CLIENTEDGE) ; m_wndTab.AddView(_T("统计数据"),pContext->m_pNewViewClass,pContext) ;
    pContext->m_pNewViewClass = RUNTIME_CLASS(CCaptureView) ;
    m_wndTab.AddView(_T("数据列表"),pContext->m_pNewViewClass,pContext) ;
    m_wndSplitter.CreateStatic( this,1,2) ;
    m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CCaptureView),CSize(300,0),pContext) ;
    m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CCaptureView),CSize(0,0),pContext) ; return TRUE;
    }统计数据 和 数据列表 将被同时拆分,
    怎么样才能只拆分 数据列表 的窗口呢??