mfc 对话框 toolBox 中的控件 Tab box

1、在话框上添加Tab Control控件并在Property属性中设置ID为IDC_TAB1. 并 变量名为m_tab. 类型为CTabCtrl。

2、在对话框的初始化函数OnInitDialog里面添加如下代码:
m_tab.InsertItem(0, "第一页");
m_tab.InsertItem(1, "第二页");

3、在对话框资源里面添加两个对话框资源, ID分别命名为IDD_TABSUBDIALOG1,IDD_TABSUBDIALOG2 . 在Property属性中设置style为Child, Border为None. 再分别为其添加对应的基于CDialog类CPara1, CPara2. 

4、在CTabTestDlg类中添加两个成员变量m_para1, m_para2, 分别是两个子对话框的实例. 代码如下: 
CPage2 m_page2;
CPage1 m_page1; 

5、在对话框的初始化函数OnInitDialog里面添加如下代码:

m_page1.Create(IDD_TABSUBDIALOG1,GetDlgItem(IDC_TAB1));
m_page2.Create(IDD_TABSUBDIALOG2,GetDlgItem(IDC_TAB1)); //创建对话框
//获得IDC_TABTEST客户区大小
CRect rs;
m_tab.GetClientRect(&rs);
rs.top+=20; 
rs.bottom-=20; 
rs.left+=20; 
rs.right-=20;  
//设置子对话框尺寸并移动到指定位置
m_page1.MoveWindow(&rs);
m_page2.MoveWindow(&rs); 
//分别设置隐藏和显示
m_page1.ShowWindow(true);
m_page2.ShowWindow(false); 
//设置默认的选项卡
m_tab.SetCurSel(0);

6、添加Tab Control控件的TCN_SELCHANGE事件响应函数OnSelchangeTabtest(NMHDR* pNMHDR, LRESULT* pResult) ,函数体代码如下:

void DlgTab::OnSelchangeTabtest(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
int CurSel = m_tab.GetCurSel();
m_page1.ShowWindow(false);
m_page2.ShowWindow(false);
switch(CurSel)
{
case 0:
m_page1.ShowWindow(true);
break; 
case 1:
m_page2.ShowWindow(true);
break;
}
*pResult = 0;
}

VS风格的ToolBox和QQ的界面很相似,都是有多个栏目,并且这些栏目可以展开和折叠,当鼠标在某个子栏目上时,可以高亮显示,另外在VS风格的ToolBox,点击选项目的时候,要用特殊的颜色标识出来。 1. 创建控件的边框,我在前边的文章也讲过(),直接将代码复制过来,稍做修改即可。 2. 添加滚动条,因为我们的控件只需要垂直的滚动,所以我只只加入一个垂直的滚动条。 3. ToolBox包含多个Category,我们不但要创建Category类,还要创建这个类的集合。 4. 每一个Category包含多个Item,我们不但要创建ToolBoxItem类,还要创建这个类的集合。 5. 重载OnPaint方法,绘制控件的内容,在绘制的时候要注意滚动条的当前值,由于采用了双缓冲机制,所以每次总是将所有的内容重绘一次,不考虑ClipRect。 6. 写一个方法,根据鼠标的坐标计算出鼠标指向的Item或者Category,这个方法是这个控件的核心。 7. 重载OnMouseMove方法,当鼠标指向某个Item的时候,高亮显示出来。 8. 重载 OnMouseDown方法,当鼠标在某个Item上按下的时候,用指定的颜色标识出来,如果鼠标按下的地方是一个Category,根据当前的情况展开或者时折叠这个category。 9. 计算控件当前状态的内容的总的高度,用于设置滚动条的可见与不可见。 10. 暴露一个属性,用于为用户提供当前选的Item。 11. 声明一个ItemChanged事件,便于用户在选择另一个Item时添加处理的代码。 实现了上述的内容,这个控件也就基本完成了。由于代码并不复杂,我就不将代码列出来讲解了,我将提供代码的下载,大家在看代码的时候,如有不明白的地方,可以参考我前面的控件教程。因为只花了几个小时写的这个控件,难免还有一些问题,请大家指出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

woquNOKIA

谢谢老板!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值