这篇文章的生成,是在另一篇的基础上生成的,同时也是这篇博客的说明,令我修改为自己需要的类型。
该博客地址:控件随着窗口大小变化
然后说明下我的实际应用,在项目中,添加了一个tabctrl,通过其切换功能实现页面的变换,该tabctrl当然是派生类啦,但其功能却挺简单的,就是将dlg添加到tabctrl中,
class CTabPage : public CTabCtrl
{
DECLARE_DYNAMIC(CTabPage)
int m_nPageCount; //页数
public:
CTabPage();
virtual ~CTabPage();
void AddPage(CWnd* pPageWnd, LPTSTR lpTitle); //添加选项卡
void ShowCurPage(UINT nShowState); //显示当前页面
CWnd* GetCurPage();
public:
afx_msg void OnTcnSelchanging(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult);
DECLARE_MESSAGE_MAP()
};
当然,这个类也不是我写的,还是拿别人的来用,但应该简单,且初步实现了我最开始要的功能,我就开始使用了,并且还可以在此基础上进行扩展,逐步修改为自己需要的类型。
CTabPage::CTabPage()
{
m_nPageCount = 0;
}
CTabPage::~CTabPage()
{
}
void CTabPage::AddPage(CWnd *pPageWnd, LPTSTR lpTitle)
{
TCITEM itemPage;
itemPage.mask = TCIF_TEXT|TCIF_PARAM;
itemPage.lParam = LPARAM(pPageWnd);
itemPage.pszText = lpTitle;
InsertItem(m_nPageCount, &itemPage);
m_nPageCount==0?pPageWnd->ShowWindow(SW_SHOW):pPageWnd->ShowWindow(SW_HIDE);
m_nPageCount++;
}
void CTabPage::ShowCurPage(UINT nShowState)
{
int nCurItem;
TCITEM itemCur;
nCurItem = GetCurSel();
itemCur.mask = TCIF_PARAM;
GetItem(nCurItem, &itemCur);
((CWnd*)itemCur.lParam)->ShowWindow(nShowState);
}
CWnd* CTabPage::GetCurPage()
{
int nCurItem;
TCITEM itemCur;
nCurItem = GetCurSel();
itemCur.mask = TCIF_PARAM;
GetItem(nCurItem, &itemCur);
return ((CWnd*)itemCur.lParam);
}
BEGIN_MESSAGE_MAP(CTabPage, CTabCtrl)
ON_NOTIFY_REFLECT(TCN_SELCHANGING, &CTabPage::OnTcnSelchanging)
ON_NOTIFY_REFLECT(TCN_SELCHANGE, &CTabPage::OnTcnSelchange)
END_MESSAGE_MAP()
// CTabPage 消息处理程序
void CTabPage::OnTcnSelchanging(NMHDR *pNMHDR, LRESULT *pResult)
{
ShowCurPage(SW_HIDE);
*pResult = 0;
}
void CTabPage::OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult)
{
ShowCurPage(SW_SHOW);
*pResult = 0;
}