改变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

相关文章

mysqld_multi在Linux服务器上运行多个MySQL实例

《mysqld_multi在Linux服务器上运行多个MySQL实例》在Linux系统上使用mysqld_multi来启动和管理多个MySQL实例是一种常见的做法,这种方式允许你在同一台机器上运行多个... 目录1. 安装mysql2. 配置文件示例配置文件3. 创建数据目录4. 启动和管理实例启动所有实例

Java function函数式接口的使用方法与实例

《Javafunction函数式接口的使用方法与实例》:本文主要介绍Javafunction函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感... 目录引言-当代码遇见诗性一、函数式接口的生物学解构1.1 函数式接口的基因密码1.2 六大核心接口的形态学

电脑没有仿宋GB2312字体怎么办? 仿宋GB2312字体下载安装及调出来的教程

《电脑没有仿宋GB2312字体怎么办?仿宋GB2312字体下载安装及调出来的教程》仿宋字体gb2312作为一种经典且常用的字体,广泛应用于各种场合,如何在计算机中调出仿宋字体gb2312?本文将为您... 仿宋_GB2312是公文标准字体之一,仿China编程宋是字体名称,GB2312是字php符编码标准名称(简

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

C#实现WinForm控件焦点的获取与失去

《C#实现WinForm控件焦点的获取与失去》在一个数据输入表单中,当用户从一个文本框切换到另一个文本框时,需要准确地判断焦点的转移,以便进行数据验证、提示信息显示等操作,本文将探讨Winform控件... 目录前言获取焦点改变TabIndex属性值调用Focus方法失去焦点总结最后前言在一个数据输入表单

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6