在MFC实现桌面程序时,可能会用到TabView效果,我实现的是最基本的效果,如下图:

下面介绍详细的实现过程,如果需要效果更好看些,自行美化。

1、  创建自定义MFCTabCtrl类MyMFCTabCtrl继承自CMFCTabCtrl。之所以要自己实现自定义的控件,主要是因为MFC自带的MFCTabCtrl无法实现标签页的关闭。怎么new一个新的类并继承该继承的父类,不再叙述。

2、  在自定义的类中需要重载左鼠标按下的消息。即添加如下图消息

消息处理函数如下,记住一定要先执行基类,即把执行父类中左键按下的消息代码放在最前面:

 void CMyMFCTabCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//要先执行基类,否则界面会失去焦点
CMFCTabCtrl::OnLButtonDown(nFlags, point);
if(m_rectCloseButton.PtInRect(point))
{
int nTab = GetActiveTab();
if(nTab > -)
{
//这个是我工程里面每个标签页的界面
CPortSet *dlg = (CPortSet *)GetTabWnd(nTab);
dlg->SendMessage(WM_DESTROY,,);
RemoveTab(nTab);
}
}
}

3、  在调用CMyMFCTabCtrl的类中定义变量:CMyMFCTabCtrl m_tabCtrl;实现代码如下:

m_tabCtrl.Create(CMyMFCTabCtrl::STYLE_FLAT,tabRect,this,,CMFCTabCtrl::LOCATION_BOTTOM);
m_tabCtrl.EnableScrollBar(SB_BOTH);
m_tabCtrl.EnableActiveTabCloseButton();

4、 添加WM_SIZE消息函数,保证控件随窗口大小变化而变化。

void CIMU4View::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
//获取当前窗体的大小,用于设置tabctrl的大小 if(m_tabCtrl/*&& nType != 1*/)
{
CRect tabCtrlRect;
m_tabCtrl.GetClientRect(&tabCtrlRect);
//将控件大小转换为对话框中的区域坐标
ScreenToClient(&tabCtrlRect);
//cx/m_viewRect.Width()是对话框的横向变化比例
tabCtrlRect.left = ;
tabCtrlRect.right = cx;
tabCtrlRect.top = ;
tabCtrlRect.bottom = cy;
m_tabCtrl.MoveWindow(&tabCtrlRect);
}
GetClientRect(&m_viewRect);
}

MFC--自定义CMFCTabCtrl的实现的更多相关文章

  1. 【转】MFC 自定义edit 限制输入十六进制内容 响应复制粘贴全选剪切的功能

    参考地址:MFC 自定义edit 限制输入内容 响应复制粘贴全选剪切的功能   Ctrl组合键ASCII码 ^Z代表Ctrl+z                     ASCII值 控制字符  AS ...

  2. VC++6.0/MFC 自定义edit 限制输入内容 响应复制粘贴全选剪切的功能

    Ctrl组合键ASCII码 ^Z代表Ctrl+z                     ASCII值 控制字符  ASCII值 控制字符  ASCII值 控制字符  ASCII值 控制字符0(00) ...

  3. Qt之自定义托盘

    说起Qt,真是个不错的ui库,不仅仅ui做的好,其他方面也不差,在平台扩展方面也是非常的强大.这篇文章我将会分析下qt的托盘,QSystemTrayIcon是qt的托盘类,托盘类的用途是什么我就不说了 ...

  4. MFC 控件使用教程

    combo box控件用法: 下拉选择控件,首先将控件拖动到你需要使用控件的地方,用ClassWizard为它关联一个变量,我们注意到变量类型是CString型的.右击属性,General中可以设置一 ...

  5. MFC的六大机制

    MFC的六大机制 程序的初始化过程 运行时类型识别 动态创建 永久保存 消息映射 命令传递 运行时类型识别 MFC的运行时类型识别就是在程序运行过程中判断某个对象是否属于某个类,MFC通过为需要进行运 ...

  6. Windows消息大全

    最近在写TabControl的用户控件,需要用到sendMessage,已做备份. 引用:http://bbs.aau.cn/forum.php?mod=viewthread&tid=7776 ...

  7. Windows窗口消息大全(转)

    Windows窗口消息大全,全不全自己看 ////////////////////////////////////////////////////////////////////////// #inc ...

  8. Windows窗口消息大全

    ////////////////////////////////////////////////////////////////////////// #include "AFXPRIV.H& ...

  9. RepositionBars的用法和参数的意义(引用别人的)

    MFC窗口位置管理详细分析及实例 在一般用MFC编写的程序的窗口客户区中,可能有好几个子窗口(具有WM_CHILD风格的窗口).上边是工具栏,中间是视图窗口,下边是状态栏.三个窗 口在框架的客户区里和 ...

  10. Windows消息类型

    WM_ Window Message 窗口消息,一般用在SendMessage,PostMessage这样的消息函数中 SM_ Static Message 静态标签消息 SS_ Static Sty ...

随机推荐

  1. 7.javascript如何调试代码

    http://www.cnblogs.com/youring2/archive/2012/08/08/2624093.html

  2. query_string查询支持全部的Apache Lucene查询语法 低频词划分依据 模糊查询 Disjunction Max

    3.3 基本查询3.3.1词条查询 词条查询是未经分析的,要跟索引文档中的词条完全匹配注意:在输入数据中,title字段含有Crime and Punishment,但我们使用小写开头的crime来搜 ...

  3. linux下EOF写法梳理 自动新建分区并挂载的脚本

    linux下EOF写法梳理 - 散尽浮华 - 博客园 https://www.cnblogs.com/kevingrace/p/6257490.html 在平时的运维工作中,我们经常会碰到这样一个场景 ...

  4. centos6.5关闭防火墙命令

    1.永久性生效,重启后不会复原 开启: chkconfig iptables on 关闭: chkconfig iptables off 2.即时生效,重启后复原 开启: service iptabl ...

  5. (4.7)sql server2008 中的merge

    简介 Merge关键字是一个神奇的DML关键字.它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句.MSDN对于Merge的解释非常的短小精悍:”根 ...

  6. .tomcat 管理 给tomcat设置用户名和密码登录

    如果点击红色框框 出现403以下错误 看这个帖子可以解决 tomcat访问管理页面出现:403 Access Denied 解决方法 tomca管理 测试功能,生产环境不要用. Tomcat管理功能用 ...

  7. Android 成功 使用GPS获取当前地理位置(解决getLastKnownLocation 返回 null)

    最近遇到一个比较棘手的问题:使用GPS定位无法获取当前的地理位置,即getLastKnownLocation方法始终返回null.   后来一篇博文 getLastKnownLocation()返回n ...

  8. SQL JOIN使用方法

    (转自W3School相关教程:http://www.w3school.com.cn,W3School是不错的在线教程,简洁高效!) 下面列出不同的SQL JOIN类型,以及他们之间的差异: JOIN ...

  9. java多线程总结(一)

    在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口. 对于直接继承Thread的类来说,代码大致框架是: 1 2 3 4 5 6 7 8 9 10 11 ...

  10. C# 字符串中正则表达式的应用

    1.截取字符串中指定内容 {"weatherinfo":{"city":"北京","cityid":"1010 ...