改变CTabCtrl控件字体颜色与背景 含实例vs2019

2023-11-22 05:30

本文主要是介绍改变CTabCtrl控件字体颜色与背景 含实例vs2019,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

	由于CTabCtrl控件的tab切换当前选中tab很不明显,在网上查了很多资料,没有发现特别适合而且说得明白的教程,所以参考官方文档自己写了一个派生类1、建立派生类,派生于CTabCtrl
class CTabCtrlEx : public CTabCtrl
{
public:CTabCtrlEx();   // 标准构造函数virtual ~CTabCtrlEx();//接受响应消息DECLARE_MESSAGE_MAP()virtual void PreSubclassWindow();//改变tab全局背景色BOOL OnEraseBkgnd(CDC* pDC);//改变tab头背景颜色、字体背景色、字体颜色virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
};
   2、cpp中实现的时候,需要响应两个消息分别是:ON_WM_ERASEBKGND()、ON_WM_DRAWITEM()
BEGIN_MESSAGE_MAP(CTabCtrlEx, CTabCtrl)ON_WM_ERASEBKGND()ON_WM_DRAWITEM()
END_MESSAGE_MAP()
  3、特别注意,PreSubclassWindow里面需要设置空间的一个类,来让它响应咱们设置的消息
void CTabCtrlEx::PreSubclassWindow()
{// TODO: 在此添加专用代码和/或调用基类ModifyStyle(0, TCS_OWNERDRAWFIXED);CTabCtrl::PreSubclassWindow();
}
  4、我没有改变tab整个页面背景的需求,所以此处我没有实现,代码注释掉了
BOOL CTabCtrlEx::OnEraseBkgnd(CDC* pDC)
{/* CBrush br(RGB(255, 0, 0));CRect rc;GetClientRect(rc);pDC->FillRect(rc, &br);*/return true;
}
   5、咱们看看tab头的背景及颜色设置,我的需求是突出选中tab,所以这块我加了限定:if (lpDrawItemStruct->itemID != GetCurSel()),不加限定是修改所有tab头的颜色。
void CTabCtrlEx::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{//创建画刷CBrush      cbr;cbr.CreateSolidBrush(RGB(228, 229, 231));获取选项卡文字内容char        szTabText[100];TC_ITEM     tci;memset(szTabText, '\0', sizeof(szTabText));tci.mask = TCIF_TEXT;tci.pszText = szTabText;tci.cchTextMax = sizeof(szTabText) - 1;GetItem(lpDrawItemStruct->itemID, &tci);//填充选项卡背景CDC* dc = CDC::FromHandle(lpDrawItemStruct->hDC);dc->FillRect(&lpDrawItemStruct->rcItem, &cbr);dc->SetBkColor(RGB(228, 229, 231));//当前选中if (lpDrawItemStruct->itemID != GetCurSel()){//绘制选项卡文字dc->SetTextColor(RGB(0, 0, 0));}else{//绘制选项卡文字dc->SetTextColor(RGB(255, 0, 0));}RECT rc;rc = lpDrawItemStruct->rcItem;rc.top += 3;dc->DrawText(tci.pszText, lstrlen(tci.pszText), &rc, DT_CENTER);
}
   6、最终效果:

在这里插入图片描述

实例下载:https://download.csdn.net/download/shenhch/85271088

这篇关于改变CTabCtrl控件字体颜色与背景 含实例vs2019的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/407855

相关文章

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

springboot security验证码的登录实例

《springbootsecurity验证码的登录实例》:本文主要介绍springbootsecurity验证码的登录实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录前言代码示例引入依赖定义验证码生成器定义获取验证码及认证接口测试获取验证码登录总结前言在spring

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Spring 中使用反射创建 Bean 实例的几种方式

《Spring中使用反射创建Bean实例的几种方式》文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newI... 目录1. 使用 Class.newInstance() (仅限无参构造函数):2. 使用 Construc

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景

MyBatis-Plus中静态工具Db的多种用法及实例分析

《MyBatis-Plus中静态工具Db的多种用法及实例分析》本文将详细讲解MyBatis-Plus中静态工具Db的各种用法,并结合具体案例进行演示和说明,具有很好的参考价值,希望对大家有所帮助,如有... 目录MyBATis-Plus中静态工具Db的多种用法及实例案例背景使用静态工具Db进行数据库操作插入

Python批量调整Word文档中的字体、段落间距及格式

《Python批量调整Word文档中的字体、段落间距及格式》这篇文章主要为大家详细介绍了如何使用Python的docx库来批量处理Word文档,包括设置首行缩进、字体、字号、行间距、段落对齐方式等,需... 目录关键代码一级标题设置  正文设置完整代码运行结果最近关于批处理格式的问题我查了很多资料,但是都没

基于Python实现一个PDF特殊字体提取工具

《基于Python实现一个PDF特殊字体提取工具》在PDF文档处理场景中,我们常常需要针对特定格式的文本内容进行提取分析,本文介绍的PDF特殊字体提取器是一款基于Python开发的桌面应用程序感兴趣的... 目录一、应用背景与功能概述二、技术架构与核心组件2.1 技术选型2.2 系统架构三、核心功能实现解析

Spring中@Lazy注解的使用技巧与实例解析

《Spring中@Lazy注解的使用技巧与实例解析》@Lazy注解在Spring框架中用于延迟Bean的初始化,优化应用启动性能,它不仅适用于@Bean和@Component,还可以用于注入点,通过将... 目录一、@Lazy注解的作用(一)延迟Bean的初始化(二)与@Autowired结合使用二、实例解