none
拆分窗口实现 RRS feed

  • 问题

  • 想实现拆分窗口,拆分窗口分别为CTreeCtrl 和 CTreeView。

    实现的方法是:

    CSplitterWndEx  m_wndSplitter;

     m_wndSplitter.CreateStatic(this, 1, 2);
     m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CSkinTreeCtrl), CSize(200,200), NULL);
     m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CTreeViewEx), CSize(50,0), NULL);
          编译能通过,但是运行的时候,会提示:

     CWnd* 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;
    }

    请问有什么方法能够实现CtreeCtrl。

    2010年4月5日 6:20

全部回复

  •  m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CSkinTreeCtrl), CSize(200,200), NULL );
     m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CTreeViewEx), CSize(50,0), NULL );

    CreateView 函数的最后一个参数不能传NULL, 应该传你OnCreateClient 函数的最后那个参数pContext。 修改一下,应该就好了。

    • 已标记为答案 飘零雪 2010年4月5日 11:32
    • 取消答案标记 飘零雪 2010年4月5日 11:32
    2010年4月5日 11:06
    版主
  •  m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CSkinTreeCtrl), CSize(200,200), NULL );
     m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CTreeViewEx), CSize(50,0), NULL );

    CreateView 函数的最后一个参数不能传NULL, 应该传你OnCreateClient 函数的最后那个参数pContext。 修改一下,应该就好了。


    可是我是在基于对话框中做的,如果CSkinTreeCtrl也用CTreeViewEx代替是可以通过的。
    2010年4月5日 11:33
  • 有可能是你CSkinTreeCtrl 创建失败了,请把断点设置到你CSkinTreeCtrl 类的初始化函数中,单步调试。
    2010年4月5日 11:54
    版主
  • 有可能是你CSkinTreeCtrl 创建失败了,请把断点设置到你CSkinTreeCtrl 类的初始化函数中,单步调试。

    后来我直接将其改为CTreeCtrl,可还是在运行的时候Crash。
    2010年4月5日 12:49