本程序实现同一文档多视、但在同一时刻只有一个可见,参见下图。
首先,创建一个CWnd派生类:
class CTabWnd : public CWnd
{
// Construction
public:
CTabWnd();
// Generated message map functions
protected:
//{{AFX_MSG(CTabWnd)
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnPaint();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
然后,添加Create函数来初始化控件:
BOOL CTabWnd::Create(DWORD dwStyle, CWnd* pParentWnd, UINT nID)
{
CRect rect, parent;
ASSERT(pParentWnd);
if (!CWnd::Create(NULL, "SealiteTabWnd", WS_CHILD|WS_VISIBLE, rect, pParentWnd, nID, NULL))
return FALSE;
m_dwStyle=dwStyle;
return TRUE;
}
下面定义一个CreateView函数:
typedef struct
{
CWnd *pWnd;
char szLabel[32];
int x_min, x_max;
}TABWND_MEMBER;
CList <TABWND_MEMBER *,TABWND_MEMBER *> m_viewList;
BOOL CreateView(LPCTSTR lpszLabel, CRuntimeClass *pViewClass, CCreateContext *pContext);
当父窗口大小改变时, 新创建的视需要重新改变大小, 下面增加WM_SIZEPARENT的处理函数:
LRESULT CTabWnd::OnSizeParent(WPARAM, LPARAM lParam)
{
PostMessage(WM_TABRESIZE);
return 0;
}
>>> DOWN !!! >>>下载源代码及演示程序