我可以在CWnd Derived类中使用CSplitterWnd吗?

时间:2014-07-11 03:06:41

标签: mfc

我有一个直接从CWnd派生的MFC类,而不是CFrameWnd,我使用CSplitterWnd作为成员变量在OnCreate消息处理程序中创建一个Splitter和两个视图。

但它在客户区没有显示任何内容。

我的方法出了什么问题?我是否必须使用CFrameWnd派生类?

由于

代码段:

// CMyWnd.h
class CMyWnd : public: CWnd
{
    DECLARE_DYNCREATE(CMyWnd)
 public:
    CMyWnd();
    virtual ~CMyWnd();
    // blahblah

 protected:
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    afx_msg void OnPaint();

    DECLARE_MESSAGE_MAP()
 private:
    CXTPSplitterWnd m_WndSplitter;
}


// CMyWnd.cpp
int CMyWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CWnd::OnCreate(lpCreateStruct) == -1)
    {
        return -1;
    }

    if (!m_WndSplitter.CreateStatic(this, 2, 1))
        return -1;

    if (
       !m_WndSplitter.CreateView(0, 0, RUNTIME_CLASS(CEditView),
                                CSize(100, 100), NULL) ||
       !m_WndSplitter.CreateView(1, 0, RUNTIME_CLASS(CEditView),
                                CSize(100, 200), NULL)
    )
    {
       m_WndSplitter.DestroyWindow();
       return -1;
    }

    return 0;

}

1 个答案:

答案 0 :(得分:1)

问题在于您创建了视图。从CView类派生的元素必须驻留在CFrameWnd派生类中。

您可以在CWnd派生类中创建拆分器,但是拆分器窗口也必须托管CWnd派生窗口。