在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. 四.mysql演示银行转账

    代码演示: #conding:utf8 import pymysql import sys class TransferMoney(object): def __init__(self,conn): ...

  2. Python高级教程-生成器

    生成器(Generator) 通过列表生成式,可以直接创建一个列表.但是,受内存限制,列表的容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几 ...

  3. android 布局属性详解

    Android功能强大,界面华丽,但是众多的布局属性就害苦了开发者,下面这篇文章结合了网上不少资料. 第一类:属性值为true或falseandroid:layout_centerHrizontal ...

  4. 学点TCPDUMP

    [root@future ~]# yum install tcpdump 官网地址: https://nmap.org/ 还有中文手册,太感动了 https://nmap.org/man/zh/man ...

  5. CNN学习笔记:梯度下降法

    CNN学习笔记:梯度下降法 梯度下降法 梯度下降法用于找到使损失函数尽可能小的w和b,如下图所示,J(w,b)损失函数是一个在水平轴w和b上面的曲面,曲面的高度表示了损失函数在某一个点的值

  6. 08 Spring框架 AOP (一)

    首先我们先来介绍一下AOP: AOP(Aspect Orient Programming),面向切面编程,是面向对象编程OOP的一种补充.面向对象编程是从静态角度考虑程序的结构,面向切面编程是从动态的 ...

  7. akka框架地址

    http://doc.akka.io/docs/akka/2.2.3/AkkaJava.pdf

  8. python2.7中的字符编码问题

    0. 写在前面 起因:之前写个数据预处理程序的时候遇到了点问题,用re模块的正则查找方法search时总是找不出来(找错了或者出乱码),于是捣鼓捣鼓. 经过:查资料,做实验,发现用utf8编码的str ...

  9. Linux网络性能评估工具iperf 、CHARIOT测试网络吞吐量

    网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理.网络存在安全漏洞等原因,都会导致网络带宽利用率不高.要找到网络带宽利用率不高的原因,就需要对网 ...

  10. shiro的Realm

    public class UserRealm extends AuthorizingRealm { private UserService userService = new UserServiceI ...