在创建mfc向导的时候,去掉 Doc/View 前面的钩.
就生成了一个 没有 Doc 的工程,该 ChildView 继承自 CWnd,
如果直接使用 以下方法,运行时候会出错.BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
// TODO: Add your specialized code here and/or call the base class
UNREFERENCED_PARAMETER(lpcs); m_splitterWnd1.CreateStatic(this,2,1);
m_splitterWnd2.CreateStatic(&m_splitterWnd1,1,2,
WS_CHILD | WS_VISIBLE | WS_BORDER,
m_splitterWnd1.IdFromRowCol(1, 0)); int nClientHeight = GetSystemMetrics(SM_CYSCREEN) - 
GetSystemMetrics(SM_CYMENU) -
GetSystemMetrics(SM_CYCAPTION);
int nClinetWidth = GetSystemMetrics(SM_CXSCREEN);
//过程信息窗口
m_splitterWnd1.CreateView(0, 0,
RUNTIME_CLASS(CChildView),
CSize(0,nClientHeight*3/5), pContext);
//设备状态信息窗口
m_splitterWnd2.CreateView(0, 0,
RUNTIME_CLASS(CChildView), 
CSize(nClinetWidth*2/5, 0), pContext);
//事件和状态信息窗口
m_splitterWnd2.CreateView(0, 1,
RUNTIME_CLASS(CChildView),
CSize(nClinetWidth*3/5, 0), pContext);

return TRUE;

// return CFrameWnd::OnCreateClient(lpcs, pContext);
}出错位置:
/////////////////////////////////////////////////////////////////////////////
// CSplitterWnd attributesCWnd* CSplitterWnd::GetPane(int row, int col) const
{
ASSERT_VALID(this); CWnd* pView = GetDlgItem(IdFromRowCol(row, col));
ASSERT(pView != NULL);  // panes can be a CWnd, but are usually CViews
return pView;
}现在请教大家,如何在 这种情况下切分窗口?这是类的继承结构,单文档,非文档/视图结构
class CChildView : public CWnd
class CMainFrame : public CFrameWnd

解决方案 »

  1.   

    什么意思? 我这里创建的工程本来没有Doc的
      

  2.   

    http://topic.csdn.net/u/20080924/16/425C9A01-6625-49F7-9652-236B847BB33B.html
    希望对你有帮助。
      

  3.   

    我的类都是在 Dll 中的,所以不能用 CView ,所以上面的似乎对我没有帮助.
      

  4.   

    http://www.codeproject.com/KB/splitter/
    应该能找到你能用的
      

  5.   

    你从CSplitter派生一个类吧,把它的一些虚拟函数重写一下,把要求CView做子窗口的对方改成CWnd,就可以容纳任何种类的窗口了.我以前就是这样做的,在一个对话框里放转置分割窗口
      

  6.   


    出错应该和doc没关系。
    GetPane在哪使用的?也许参数设置不对。