CMFCTabCtrl如何截获点击按钮跳转到选项卡关闭选项卡按钮的消息,求助

下次自动登录
现在的位置:
& 综合 & 正文
MFC 新Tab按钮的使用,解决关闭按钮的BUG
上图是VS2008的MFCTabCtrl控件标签页效果还是不错的(需要打SP1补丁),使用起来也比以前的CTabCtrl方便许多,但是这个控件有一个BUG, 就是在非多文档程序中关闭按钮无法正常使用,网上找了一下基本都没彻底讲清楚。自己动手,丰衣足食!问题还是自己弄懂的好,话不多说了,我贴一下解决关闭按钮的代码:
// 解决 CMFCTabCtrl 控件标签页“关闭”按钮的BUG
void CMFCTabCtrlEx::OnLButtonDown(UINT nFlags, CPoint point)
CMFCTabCtrl::OnLButtonDown(nFlags, point);
// 获取Tab的数量
if (GetTabsNum() == 0)
// 获取当前选择的Tab
int sel = GetActiveTab();
// 获取关闭按钮的区域
CRect rcCloseB
rcCloseBtn = GetTabCloseButton();
if (rcCloseBtn.PtInRect(point))
if(MessageBox(_T("确认关闭该标签页?"), _T("关闭提示"), MB_YESNO) == IDYES)
// 关闭当前Tab页关联窗口
GetActiveWnd()-&SendMessage(WM_CLOSE);
// 删除当前Tab
RemoveTab(sel);
&&&&推荐文章:
【上篇】【下篇】安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&自定义MFC中的选项卡窗口控件CCoolTabCtrl
22:33 1735人阅读 (2)
转载请标明是引用于
欢迎大家提出意见,一起讨论!
参考代码:(VS2005)
在MFC中有TabPage控件,但是若想在控件里添加一个按钮或是树型控件,就得自己写控件。
最近最到这个问题,于是参考别人的代码下自己写了此控件。
效果图如下:
1、设计过程
步骤一:& 设计每个选择页的类CPageItem
class&CPageItem&&
&&&&&&&&friend&class&CCoolTabC&&
&&&&&&&&CWnd*&&&&&&&m_pW&&&&&///窗口,可以为NULL
&&&&&&&&UINT&&&&&&&&m_nS&&&///窗口类型,0:普通,1:动态创建
&&&&&&&&CString&&&&&m_sT&&&&///文字
&&&&&&&&HICON&&&&&&&m_hI&&&&///图标
&&&&public:&&
&&&&&&&&CRect&&&&&&&m_&&&&&&&
&&&&public:&&
&&&&&&&&void&SetPageStyle(UINT&nStyle)&&
&&&&&&&&{&&
&&&&&&&&&&&&m_nStyle&=&nS&&
&&&&&&&&}&&
&&&&&&&&UINT&GetAreaWidth(CDC&*pDC);&&
&&&&&&&&void&Draw(CDC&*pDC,UINT&nStyle,BOOL&bActive);&&
class CPageItem
friend class CCoolTabC
///窗口,可以为NULL
///窗口类型,0:普通,1:动态创建
void SetPageStyle(UINT nStyle)
m_nStyle = nS
UINT GetAreaWidth(CDC *pDC);
void Draw(CDC *pDC,UINT nStyle,BOOL bActive);
///////取得需要占用的宽度/////
UINT&CCoolTabCtrl::CPageItem::GetAreaWidth(CDC&*pDC)&&
&&&&UINT&width&=&pDC-&GetTextExtent(m_sText).&&
&&&&if(m_hIcon)&&
&&&&&&&&width&+=&18;&&
&&&&return&width&+&9;&&
///////取得需要占用的宽度/////
UINT CCoolTabCtrl::CPageItem::GetAreaWidth(CDC *pDC)
UINT width = pDC-&GetTextExtent(m_sText).
if(m_hIcon)
width += 18;
return width + 9;
根据不同的类型画出方形
&根据显示文字的大小绘字
//&根据不同的类型画出方形
//&根据显示文字的大小绘字
void&CCoolTabCtrl::CPageItem::Draw(CDC&*pDC,&UINT&nStyle,&BOOL&bActive)&&
&&&&CRect&rect&=&m_&&
&&&&if(nStyle&TCS_DOWN)&&
&&&&&&&&if(bActive)&&
&&&&&&&&{&&
&&&&&&&&&&&&rect.top&-=&2;&&
&&&&&&&&&&&&CBrush&brush(GetSysColor(COLOR_3DFACE));&&
&&&&&&&&&&&&pDC-&FillRect(rect,&brush);&&
&&&&&&&&&&&&rect.top&+=&1;&&
&&&&&&&&}&&
&&&&&&&&else&&
&&&&&&&&&&&&rect.bottom&-=&1;&&
&&&&&&&&CBrush&brush(GetSysColor(COLOR_3DFACE));&&
&&&&&&&&pDC-&FillRect(m_rect,&brush);&&
&&&&&&&&pDC-&SelectObject(&_penW);&&
&&&&&&&&pDC-&MoveTo(rect.left,rect.top);&&
&&&&&&&&pDC-&LineTo(rect.left,rect.bottom-1);&&
&&&&&&&&&&
&&&&&&&&pDC-&SelectObject(&_pen3DShadow);&&
&&&&&&&&pDC-&MoveTo(rect.left+1,rect.bottom-2);&&
&&&&&&&&pDC-&LineTo(rect.left+1,rect.bottom-1);&&
&&&&&&&&pDC-&LineTo(rect.right-1,rect.bottom-1);&&
&&&&&&&&pDC-&MoveTo(rect.right-2,rect.bottom-2);&&
&&&&&&&&pDC-&LineTo(rect.right-1,rect.bottom-2);&&
&&&&&&&&pDC-&LineTo(rect.right-1,rect.top-1);&&
&&&&&&&&pDC-&SelectObject(&_penB);&&
&&&&&&&&pDC-&MoveTo(rect.left+2,rect.bottom);&&
&&&&&&&&pDC-&LineTo(rect.right-2,rect.bottom);&&
&&&&&&&&pDC-&LineTo(rect.right,rect.bottom-2);&&
&&&&&&&&pDC-&MoveTo(rect.right,rect.top);&&
&&&&&&&&pDC-&LineTo(rect.right,rect.bottom-1);&&
&&&&&&&&rect.top&-=&1;&&
&&&&}//end&of&TCS_DOWN
&&&&else&if(nStyle&TCS_UP)&&
&&&&&&&&CBrush&brush(GetSysColor(COLOR_3DFACE));&&
&&&&&&&&if(bActive)&&
&&&&&&&&{&&
&&&&&&&&&&&&rect.bottom&+=&1;&&
&&&&&&&&&&&&pDC-&FillRect(rect,&brush);&&
&&&&&&&&&&&&rect.bottom&-=&1;&&
&&&&&&&&}&&
&&&&&&&&else&&
&&&&&&&&{&&
&&&&&&&&&&&&rect.top&+=&2;&&
&&&&&&&&&&&&pDC-&FillRect(rect,&brush);&&
&&&&&&&&}&&
&&&&&&&&pDC-&SelectObject(&_penW);&&
&&&&&&&&pDC-&MoveTo(rect.left,rect.bottom);&&
&&&&&&&&pDC-&LineTo(rect.left,rect.top&+&2);&&
&&&&&&&&pDC-&LineTo(rect.left&+&2,rect.top);&&
&&&&&&&&pDC-&LineTo(rect.right,rect.top);&&
&&&&&&&&pDC-&SelectObject(&_pen3DShadow);&&
&&&&&&&&pDC-&MoveTo(rect.right&-&1,rect.top);&&
&&&&&&&&pDC-&LineTo(rect.right&-&1,rect.bottom);&&
&&&&&&&&&&&&&&
&&&&&&&&pDC-&SelectObject(&_penB);&&
&&&&&&&&pDC-&MoveTo(rect.right,rect.top&+&1);&&
&&&&&&&&pDC-&LineTo(rect.right,rect.bottom);&&&
&&&&///////////调整位置//////////
&&&&&&&&rect.left&+=&5;&&
&&&&&&&&rect.right&-=&2;&&
&&&&&&&&///////////显示图标//////////
&&&&&&&&if(rect.Width()&&&16&&&&m_hIcon&!=&NULL)&&
&&&&&&&&{&&
&&&&&&&&&&&&::DrawIconEx(pDC-&m_hDC,rect.left,rect.top&+&3,m_hIcon,16,16,0,NULL,DI_NORMAL);&&
&&&&&&&&&&&&rect.left&+=&18;&&
&&&&&&&&}&&
&&&&&&&&if&(!m_sText.IsEmpty())&&
&&&&&&&&{&&
&&&&&&&&&&&&///////////显示文字//////////
&&&&&&&&&&&&rect.top&+=&5;&&
&&&&&&&&&&&&CString&sText&=&m_sT&&
&&&&&&&&&&&&int&l&=&sText.GetLength();&&
&&&&&&&&&&&&int&i;&&
&&&&&&&&&&&&for(i=0;i&10&&&&pDC-&GetTextExtent(sText).cx&&&rect.Width();i++,l-=2)&&
&&&&&&&&&&&&&&&&sText&=&sText.Left(l-2);&&
&&&&&&&&&&&&if(i&&&0)&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&sText&=&sText.Left(l-2);&&
&&&&&&&&&&&&&&&&sText&+=&"...";&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&pDC-&DrawText(sText,&&rect,&DT_LEFT&|&DT_SINGLELINE);&&
&&&&&&&&}&&
// 根据不同的类型画出方形
// 根据显示文字的大小绘字
void CCoolTabCtrl::CPageItem::Draw(CDC *pDC, UINT nStyle, BOOL bActive)
CRect rect = m_
if(nStyle&TCS_DOWN)
if(bActive)
rect.top -= 2;
CBrush brush(GetSysColor(COLOR_3DFACE));
pDC-&FillRect(rect,&brush);
rect.top += 1;
rect.bottom -= 1;
CBrush brush(GetSysColor(COLOR_3DFACE));
pDC-&FillRect(m_rect,&brush);
pDC-&SelectObject(&_penW);
pDC-&MoveTo(rect.left,rect.top);
pDC-&LineTo(rect.left,rect.bottom-1);
pDC-&SelectObject(&_pen3DShadow);
pDC-&MoveTo(rect.left+1,rect.bottom-2);
pDC-&LineTo(rect.left+1,rect.bottom-1);
pDC-&LineTo(rect.right-1,rect.bottom-1);
pDC-&MoveTo(rect.right-2,rect.bottom-2);
pDC-&LineTo(rect.right-1,rect.bottom-2);
pDC-&LineTo(rect.right-1,rect.top-1);
pDC-&SelectObject(&_penB);
pDC-&MoveTo(rect.left+2,rect.bottom);
pDC-&LineTo(rect.right-2,rect.bottom);
pDC-&LineTo(rect.right,rect.bottom-2);
pDC-&MoveTo(rect.right,rect.top);
pDC-&LineTo(rect.right,rect.bottom-1);
rect.top -= 1;
}//end of TCS_DOWN
else if(nStyle&TCS_UP)
CBrush brush(GetSysColor(COLOR_3DFACE));
if(bActive)
rect.bottom += 1;
pDC-&FillRect(rect,&brush);
rect.bottom -= 1;
rect.top += 2;
pDC-&FillRect(rect,&brush);
pDC-&SelectObject(&_penW);
pDC-&MoveTo(rect.left,rect.bottom);
pDC-&LineTo(rect.left,rect.top + 2);
pDC-&LineTo(rect.left + 2,rect.top);
pDC-&LineTo(rect.right,rect.top);
pDC-&SelectObject(&_pen3DShadow);
pDC-&MoveTo(rect.right - 1,rect.top);
pDC-&LineTo(rect.right - 1,rect.bottom);
pDC-&SelectObject(&_penB);
pDC-&MoveTo(rect.right,rect.top + 1);
pDC-&LineTo(rect.right,rect.bottom);
///////////调整位置//////////
rect.left += 5;
rect.right -= 2;
///////////显示图标//////////
if(rect.Width() & 16 && m_hIcon != NULL)
::DrawIconEx(pDC-&m_hDC,rect.left,rect.top + 3,m_hIcon,16,16,0,NULL,DI_NORMAL);
rect.left += 18;
if (!m_sText.IsEmpty())
///////////显示文字//////////
rect.top += 5;
CString sText = m_sT
int l = sText.GetLength();
for(i=0;i&10 && pDC-&GetTextExtent(sText).cx & rect.Width();i++,l-=2)
sText = sText.Left(l-2);
sText = sText.Left(l-2);
sText += "...";
pDC-&DrawText(sText, &rect, DT_LEFT | DT_SINGLELINE);
在CCoolTabCtrl::CPageItem::Draw中根据m_rect绘制。那么m_rect是哪里得来的呢?
肯定是在包容它的窗器CCoolTabCtrl中传给它的。这发生在CCoolTabCtrl::AutoSize().
步骤一:& 设计选项卡窗口控件CCoolTabCtrl
/////////////////////////////////////////////////////////////////////////////
//&CCoolTabCtrl&window
class&CCoolTabCtrl&:&public&CWnd&&
&&&&class&CPageItem&&
&&&&&&&&friend&class&CCoolTabC&&
&&&&&&&&CWnd*&&&&&&&m_pW&&&&&///窗口,可以为NULL
&&&&&&&&UINT&&&&&&&&m_nS&&&///窗口类型,0:普通,1:动态创建
&&&&&&&&CString&&&&&m_sT&&&&///文字
&&&&&&&&HICON&&&&&&&m_hI&&&&///图标
&&&&public:&&
&&&&&&&&CRect&&&&&&&m_&&&&&&&
&&&&public:&&
&&&&&&&&void&SetPageStyle(UINT&nStyle)&&
&&&&&&&&{&&
&&&&&&&&&&&&m_nStyle&=&nS&&
&&&&&&&&}&&
&&&&&&&&UINT&GetAreaWidth(CDC&*pDC);&&
&&&&&&&&void&Draw(CDC&*pDC,UINT&nStyle,BOOL&bActive);&&
&&&&DECLARE_DYNCREATE(CCoolTabCtrl)&&
//&Construction
&&&&CCoolTabCtrl();&&
//&Attributes
//&Operations
//&Overrides
&&&&//&ClassWizard&generated&virtual&function&overrides
&&&&//{{AFX_VIRTUAL(CCoolTabCtrl)
&&&&//}}AFX_VIRTUAL
//&Implementation
&&&&void&SetStyleMonoSpace(BOOL&bEnable&=&TRUE);&&
&&&&void&SetStyleDirection(int&Direction);&&&&&&///Direction取值:TCS_UP,TCS_DOWN
&&&&void&SetStyleAnimate(BOOL&bEnable&=&TRUE);&&///允许动画bEnable&=&TRUE,否则为FALSE
&&&&void&UpdateWindow();&&
&&&&BOOL&m_bEraseB&&
&&&&UINT&GetStyle();&&
&&&&void&SetStyle(UINT&style);&&
&&&&void&DrawFrame(CDC&*pDC);&&
&&&&void*&GetPageItem(UINT&nIndex);&&
&&&&void&SetActivePage(int&nIndex);&&
&&&&BOOL&AddPage(CRuntimeClass*&pClass,UINT&nIDTemplate,LPCTSTR&sText,UINT&IconID&=&NULL);&&
&&&&CPageItem*&AddPage(CWnd&*pWnd,LPCTSTR&sText,UINT&IconID&=&NULL);&&
&&&&void&AutoSize();&&
&&&&void&GetClientRect(LPRECT&lpRect&);&&
&&&&BOOL&Create(UINT&wStyle,&const&CRect&&&rect,&CWnd&*&pParentWnd,&UINT&nID);&&
&&&&virtual&~CCoolTabCtrl();&&
&&&&//&Generated&message&map&functions
protected:&&
&&&&//{{AFX_MSG(CCoolTabCtrl)
&&&&afx_msg&void&OnPaint();&&
&&&&afx_msg&BOOL&OnEraseBkgnd(CDC*&pDC);&&
&&&&afx_msg&void&OnLButtonDown(UINT&nFlags,&CPoint&point);&&
&&&&afx_msg&void&OnSizing(UINT&fwSide,&LPRECT&pRect);&&
&&&&afx_msg&void&OnSize(UINT&nType,&int&cx,&int&cy);&&
&&&&afx_msg&void&OnTimer(UINT&nIDEvent);&&
&&&&afx_msg&BOOL&OnNotify(&WPARAM&wParam,&LPARAM&lParam,&LRESULT*&pResult&);&&
&&&&afx_msg&int&&OnCreate(LPCREATESTRUCT&lpCreateStruct);&&
&&&&afx_msg&void&OnDestroy();&&&&&
&&&&//}}AFX_MSG
&&&&DECLARE_MESSAGE_MAP()&&
private:&&
&&&&CFont&&&&&&&m_&&
&&&&int&&&&&&&&&m_nActiveP&&
&&&&UINT&&&&&&&&m_nS&&
&&&&UINT&&&&&&&&m_nB&&
&&&&CPtrList&&&&m_PageL&&
/////////////////////////////////////////////////////////////////////////////
// CCoolTabCtrl window
class CCoolTabCtrl : public CWnd
class CPageItem
friend class CCoolTabC
///窗口,可以为NULL
///窗口类型,0:普通,1:动态创建
void SetPageStyle(UINT nStyle)
m_nStyle = nS
UINT GetAreaWidth(CDC *pDC);
void Draw(CDC *pDC,UINT nStyle,BOOL bActive);
DECLARE_DYNCREATE(CCoolTabCtrl)
// Construction
CCoolTabCtrl();
// Attributes
// Operations
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CCoolTabCtrl)
//}}AFX_VIRTUAL
// Implementation
void SetStyleMonoSpace(BOOL bEnable = TRUE);
void SetStyleDirection(int Direction);
///Direction取值:TCS_UP,TCS_DOWN
void SetStyleAnimate(BOOL bEnable = TRUE);
///允许动画bEnable = TRUE,否则为FALSE
void UpdateWindow();
BOOL m_bEraseB
UINT GetStyle();
void SetStyle(UINT style);
void DrawFrame(CDC *pDC);
void* GetPageItem(UINT nIndex);
void SetActivePage(int nIndex);
BOOL AddPage(CRuntimeClass* pClass,UINT nIDTemplate,LPCTSTR sText,UINT IconID = NULL);
CPageItem* AddPage(CWnd *pWnd,LPCTSTR sText,UINT IconID = NULL);
void AutoSize();
void GetClientRect(LPRECT lpRect );
BOOL Create(UINT wStyle, const CRect & rect, CWnd * pParentWnd, UINT nID);
virtual ~CCoolTabCtrl();
// Generated message map functions
protected:
//{{AFX_MSG(CCoolTabCtrl)
afx_msg void OnPaint();
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnSizing(UINT fwSide, LPRECT pRect);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnTimer(UINT nIDEvent);
afx_msg BOOL OnNotify( WPARAM wParam, LPARAM lParam, LRESULT* pResult );
afx_msg int
OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnDestroy();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
m_nActiveP
最重要的创建函数OnCreate调用了CWnd类的OnCreate后就创建字体而已.
int&CCoolTabCtrl::OnCreate(LPCREATESTRUCT&lpCreateStruct)&&
&&&&if(CWnd::OnCreate(lpCreateStruct)&==&-1)&&
&&&&&&&&return&-1;&&
&&&&LOGFONT&logF&&
&&&&ZeroMemory((void*)&logFont,sizeof(logFont));&&
&&&&wcscpy_s(logFont.lfFaceName,&L"宋体");&&
&&&&logFont.lfHeight&=&-12;&&
&&&&logFont.lfWeight&=&400;&&
&&&&logFont.lfCharSet&=&GB2312_CHARSET;&&
&&&&logFont.lfOutPrecision&=&3;&&
&&&&logFont.lfClipPrecision&=&2;&&&
&&&&logFont.lfQuality&=&1;&&
&&&&logFont.lfPitchAndFamily&=&2;&&
&&&&m_font.CreateFontIndirect(&logFont);&&
&&&&SetFont(&m_font);&&
&&&&return&0;&&
int CCoolTabCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
if(CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
LOGFONT logF
ZeroMemory((void*)&logFont,sizeof(logFont));
wcscpy_s(logFont.lfFaceName, L"宋体");
logFont.lfHeight = -12;
logFont.lfWeight = 400;
logFont.lfCharSet = GB2312_CHARSET;
logFont.lfOutPrecision = 3;
logFont.lfClipPrecision = 2;
logFont.lfQuality = 1;
logFont.lfPitchAndFamily = 2;
m_font.CreateFontIndirect(&logFont);
SetFont(&m_font);
&把页面窗口添加到适合位置,当新建它的选项卡
//&把页面窗口添加到适合位置,当新建它的选项卡
CCoolTabCtrl::CPageItem*&CCoolTabCtrl::AddPage(CWnd&*pWnd,&LPCTSTR&sText,&UINT&IconID)&&
&&&&ASSERT(pWnd);&&
&&&&ASSERT(IsWindow(pWnd-&m_hWnd));&&
&&&&CPageItem&*pItem&=&NULL;&&
&&&&pItem&=&new&CPageItem();&&
&&&&pItem-&m_pWnd&=&pW&&
&&&&pItem-&m_nStyle&=&0;&//Window
&&&&pItem-&m_sText&=&sT&&
&&&&if(IconID)&&
&&&&&&&&pItem-&m_hIcon&=&AfxGetApp()-&LoadIcon(IconID);&&
&&&&else&&
&&&&&&&&pItem-&m_hIcon&=&NULL;&&
&&&&CRect&&&&&
&&&&GetClientRect(rect);&&
&&&&pWnd-&MoveWindow(rect);&&
&&&&m_PageList.AddTail(pItem);&&
&&&&//&如果添加的Page&index不等于m_nActivePage,&则隐藏
&&&&if(m_nActivePage&!=&m_PageList.GetCount())&&
&&&&&&&&pWnd-&ShowWindow(SW_HIDE);&&
&&&&return&pI&&
BOOL&CCoolTabCtrl::AddPage(CRuntimeClass*&pClass,UINT&nIDTemplate,&LPCTSTR&sText,&UINT&IconID)&&
&&&&CDialog&*pDlg&=&(CDialog*)pClass-&CreateObject();&&
&&&&if(pDlg&!=&NULL)&&
&&&&&&&&if(pDlg-&Create(nIDTemplate,this))&&
&&&&&&&&{&&
&&&&&&&&&&&&CCoolTabCtrl::CPageItem&*pItem&=&AddPage(pDlg,&sText,&IconID);&&
&&&&&&&&&&&&if(pItem)&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&pItem-&SetPageStyle(1);&&
&&&&&&&&&&&&&&&&return&TRUE;&&
&&&&&&&&&&&&}&&
&&&&&&&&}&&
&&&&return&FALSE;&&
// 把页面窗口添加到适合位置,当新建它的选项卡
CCoolTabCtrl::CPageItem* CCoolTabCtrl::AddPage(CWnd *pWnd, LPCTSTR sText, UINT IconID)
ASSERT(pWnd);
ASSERT(IsWindow(pWnd-&m_hWnd));
CPageItem *pItem = NULL;
pItem = new CPageItem();
pItem-&m_pWnd = pW
pItem-&m_nStyle = 0;
pItem-&m_sText = sT
if(IconID)
pItem-&m_hIcon = AfxGetApp()-&LoadIcon(IconID);
pItem-&m_hIcon = NULL;
GetClientRect(rect);
pWnd-&MoveWindow(rect);
m_PageList.AddTail(pItem);
// 如果添加的Page index不等于m_nActivePage, 则隐藏
if(m_nActivePage != m_PageList.GetCount())
pWnd-&ShowWindow(SW_HIDE);
BOOL CCoolTabCtrl::AddPage(CRuntimeClass* pClass,UINT nIDTemplate, LPCTSTR sText, UINT IconID)
CDialog *pDlg = (CDialog*)pClass-&CreateObject();
if(pDlg != NULL)
if(pDlg-&Create(nIDTemplate,this))
CCoolTabCtrl::CPageItem *pItem = AddPage(pDlg, sText, IconID);
pItem-&SetPageStyle(1);
return TRUE;
return FALSE;
在OnPain里重新绘制3D主框和每个选项
//&重新绘制3D主框和每个选项
void&CCoolTabCtrl::OnPaint()&&&
&&&&CPaintDC&&&&dc(this);&&
&&&&CPen&&&&*pOldPen&=&dc.GetCurrentPen();&&
&&&&CFont&&&*pOldFont&=&dc.SelectObject(&m_font);&&
&&&&int&&&&&nOldBkMode&=&dc.SetBkMode(TRANSPARENT);&&
&&&&CPageItem&&&*pI&&
&&&&POSITION&&&&&&
&&&&int&&&&&nItemIndex&=&0;&&
&&&&DrawFrame(&dc);&&
&&&&for(pos=m_PageList.GetHeadPosition();pos!=NULL;nItemIndex++)&&
&&&&&&&&pItem=(CPageItem*)m_PageList.GetNext(pos);&&
&&&&&&&&if(pItem)&&
&&&&&&&&{&&
&&&&&&&&&&&&pItem-&Draw(&dc,m_nStyle,(m_nActivePage==nItemIndex)?TRUE:FALSE);&&
&&&&&&&&}&&
&&&&dc.SetBkMode(nOldBkMode);&&
&&&&dc.SelectObject(pOldFont);&&
&&&&dc.SelectObject(pOldPen);&&
// 重新绘制3D主框和每个选项
void CCoolTabCtrl::OnPaint()
*pOldPen = dc.GetCurrentPen();
*pOldFont = dc.SelectObject(&m_font);
nOldBkMode = dc.SetBkMode(TRANSPARENT);
nItemIndex = 0;
DrawFrame(&dc);
for(pos=m_PageList.GetHeadPosition();pos!=NULL;nItemIndex++)
pItem=(CPageItem*)m_PageList.GetNext(pos);
pItem-&Draw(&dc,m_nStyle,(m_nActivePage==nItemIndex)?TRUE:FALSE);
dc.SetBkMode(nOldBkMode);
dc.SelectObject(pOldFont);
dc.SelectObject(pOldPen);
2、使用方法
在主界面中添加CCoolTabCtrl类成员。
CCoolTabCtrl&m_TabC&&&&&//&选项卡控件,&用于管理子窗口&&
CCoolTabCtrl m_TabC
// 选项卡控件, 用于管理子窗口
选项卡控件创建
//&创建一个选项卡控件
m_TabCtrl.Create(TCS_DOWN&|&WS_CHILD&|&WS_VISIBLE,&CRect(0,0,100,100),&&m_wndCtrlBar,&125);&&
// 创建一个选项卡控件
m_TabCtrl.Create(TCS_DOWN | WS_CHILD | WS_VISIBLE, CRect(0,0,100,100), &m_wndCtrlBar, 125);
TabCtrl作为一个容器添加新的控件
//&将树型控件加入到TabCtrl中
&m_TabCtrl.AddPage(&m_TreeCtrl,&L"文件目录",&IDI_DIR);&&
&m_TabCtrl.AddPage(RUNTIME_CLASS(CPrevDlg),&IDD_PREV,&L"位图浏览",&IDI_DIR);&&
// 将树型控件加入到TabCtrl中
m_TabCtrl.AddPage(&m_TreeCtrl, L"文件目录", IDI_DIR);
m_TabCtrl.AddPage(RUNTIME_CLASS(CPrevDlg), IDD_PREV, L"位图浏览", IDI_DIR);
调整大小并激活选项页
m_TabCtrl.UpdateWIndow();&&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&

我要回帖

更多关于 mfc发送按钮点击消息 的文章

 

随机推荐