我有一个直接从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;
}
答案 0 :(得分:1)
问题在于您创建了视图。从CView类派生的元素必须驻留在CFrameWnd派生类中。
您可以在CWnd派生类中创建拆分器,但是拆分器窗口也必须托管CWnd派生窗口。