MFC--自定义CMFCTabCtrl的实现
在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的实现的更多相关文章
- 【转】MFC 自定义edit 限制输入十六进制内容 响应复制粘贴全选剪切的功能
参考地址:MFC 自定义edit 限制输入内容 响应复制粘贴全选剪切的功能 Ctrl组合键ASCII码 ^Z代表Ctrl+z ASCII值 控制字符 AS ...
- VC++6.0/MFC 自定义edit 限制输入内容 响应复制粘贴全选剪切的功能
Ctrl组合键ASCII码 ^Z代表Ctrl+z ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符0(00) ...
- Qt之自定义托盘
说起Qt,真是个不错的ui库,不仅仅ui做的好,其他方面也不差,在平台扩展方面也是非常的强大.这篇文章我将会分析下qt的托盘,QSystemTrayIcon是qt的托盘类,托盘类的用途是什么我就不说了 ...
- MFC 控件使用教程
combo box控件用法: 下拉选择控件,首先将控件拖动到你需要使用控件的地方,用ClassWizard为它关联一个变量,我们注意到变量类型是CString型的.右击属性,General中可以设置一 ...
- MFC的六大机制
MFC的六大机制 程序的初始化过程 运行时类型识别 动态创建 永久保存 消息映射 命令传递 运行时类型识别 MFC的运行时类型识别就是在程序运行过程中判断某个对象是否属于某个类,MFC通过为需要进行运 ...
- Windows消息大全
最近在写TabControl的用户控件,需要用到sendMessage,已做备份. 引用:http://bbs.aau.cn/forum.php?mod=viewthread&tid=7776 ...
- Windows窗口消息大全(转)
Windows窗口消息大全,全不全自己看 ////////////////////////////////////////////////////////////////////////// #inc ...
- Windows窗口消息大全
////////////////////////////////////////////////////////////////////////// #include "AFXPRIV.H& ...
- RepositionBars的用法和参数的意义(引用别人的)
MFC窗口位置管理详细分析及实例 在一般用MFC编写的程序的窗口客户区中,可能有好几个子窗口(具有WM_CHILD风格的窗口).上边是工具栏,中间是视图窗口,下边是状态栏.三个窗 口在框架的客户区里和 ...
- Windows消息类型
WM_ Window Message 窗口消息,一般用在SendMessage,PostMessage这样的消息函数中 SM_ Static Message 静态标签消息 SS_ Static Sty ...
随机推荐
- 指定文件夹 指定文件后缀名 删除整个文件夹 git 冲突解决 create a new repository on the command line push an existing repository from the command line
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c2 ...
- js滚动显示: 滚动条置顶/底
<script> //当聊天室的内容超出页面范围时, 如何让页面刷新后 显示最下面的内容 document.getElementByIdx ( 'chatboard').scrollTop ...
- GetWindowThreadProcessId
函数功能:该函数返回创建指定窗口线程的标识和创建窗口的进程的标识符,后一项是可选的. 函数原型:DWORD GetWindowThreadProcessld(HWND hwnd,LPDWORD lpd ...
- Java 之内部类
概述 内部类修饰符 内部类的细节 局部内部类 匿名内部类及其应用 匿名内部类细节 内部类概述 将一个类定义在另一个类的里面, 里面的那个类就称为内部类(内置类, 嵌套类). class Outer { ...
- 解决chrome在ubuntu+root模式下打不开的问题
chrome在ubuntu root模式下打不开 双击图标,chrome打不开了: 解决办法: 查看一下打开chrome浏览器的命令是什么,右键properties 发现是chromium-brows ...
- flask实现获取表单并执行shell
1.一个HTML form input和一个button提供给用户输入 2.使用flask的request获取用户输入的文件名 3.判断输入异常 4.执行shell命令touch aa.txt 并返回 ...
- go——基本构成要素
Go的语言符号又称为词法元素,共包括5类内容: 标识符(identifier) 关键字(keyword) 字面量(literal) 分隔符(delimiter) 操作符(operator)它们可以组成 ...
- IE10、火狐浏、谷歌浏览器 KindEditor无法获取textarea值
http://e-mailwu.blog.163.com/blog/static/651040362013311160913/ 在IE10.火狐浏览器.谷歌浏览器下后台KindEditor在线编辑器无 ...
- 字符数组(char)和字符串(string)的转换
#include<iostream>#include<string>using namespace std;void main(){ string LyuS = "W ...
- Python面试题之Python正则表达式指南
1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...