CTabCtrl
如上图所示,下面我们来逐步实现:
首先我们要准备三张图标,载入工程:
IDI_ICON1,IDI_ICON2,IDI_ICO3
在view类增加变量:
CTabCtrl m_TabCtrl;
CImageList m_ImageList;
在OnInitialUpdate(或者OnCreate)消息里处理:
m_TabCtrl.Create(WS_CHILD|WS_VISIBLE|TCS_MULTILINE|TCS_TOOLTIPS|TCS_FIXEDWIDTH,CRect(10,10,400,400),this,1);
m_TabCtrl.SetExtendedStyle(TCS_EX_FLATSEPARATORS|TCS_EX_REGISTERDROP);
m_ImageList.Create(16,16,ILC_COLOR32|ILC_MASK,0,0);
m_TabCtrl.SetImageList(&m_ImageList);
for(inti=0;i<3;i++)
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2+i));
m_TabCtrl.InsertItem(TCIF_TEXT|TCIF_IMAGE,0,"item 1",0,0);
m_TabCtrl.InsertItem(TCIF_TEXT|TCIF_IMAGE,1,"item 2",1,1);
m_TabCtrl.InsertItem(TCIF_TEXT|TCIF_IMAGE,2,"item 3",2,2);
m_TabCtrl.HighlightItem(0,TRUE);
CRectrect0;
m_TabCtrl.GetItemRect(0,&rect0);
m_OnItem1btn.Create("btn 1",WS_BORDER|WS_CHILD|WS_VISIBLE,CRect(rect0.left+20,rect0.top+50,rect0.left+120,rect0.top+100),this,101);
CRectrect1;
m_TabCtrl.GetItemRect(1,&rect1);
m_OnItem2btn.Create("btn 2",WS_BORDER|WS_CHILD,CRect(rect1.left,rect1.top+100,rect1.left+100,rect1.top+150),this,102);
CRectrect2;
m_TabCtrl.GetItemRect(2,&rect2);
m_OnItem3btn.Create("btn 3",WS_BORDER|WS_CHILD,CRect(rect2.left,rect2.top+100,rect2.left+100,rect2.top+150),this,103);
处理用户点击选择消息:
添加消息:
afx_msg voidOnNotifyClicked(NMHDR*pNotifyStruct,LRESULT*result);
添加映射:
ON_NOTIFY(NM_CLICK,1,OnNotifyClicked)
消息处理:
void CTabTestView::OnNotifyClicked(NMHDR*pNMHDR,LRESULT*pResult)
{
intitem;
item=m_TabCtrl.GetCurFocus();
intcount;
count=m_TabCtrl.GetItemCount();
for(inti=0;i<count;i++)
{
if(i==item)
{
m_TabCtrl.HighlightItem(i,TRUE);
}
else
{
m_TabCtrl.HighlightItem(i,FALSE);
}
}
switch(item)
{
case0:
{
m_OnItem1btn.ShowWindow(SW_SHOW);
m_OnItem2btn.ShowWindow(SW_HIDE);
m_OnItem3btn.ShowWindow(SW_HIDE);
break;
}
case1:
{
m_OnItem1btn.ShowWindow(SW_HIDE);
m_OnItem2btn.ShowWindow(SW_SHOW);
m_OnItem3btn.ShowWindow(SW_HIDE);
break;
}
case2:
{
m_OnItem1btn.ShowWindow(SW_HIDE);
m_OnItem2btn.ShowWindow(SW_HIDE);
m_OnItem3btn.ShowWindow(SW_SHOW);
break;
}
default:
break;
}
}
一切搞定,记住再给按钮添加消息响应函数时要指定父窗口为view窗口(this),除非你的Tab是自己新建的派生类,然后在派生类响应消息响应时可以的,即指定按钮的父窗口为tab窗口。