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

相关文章

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Apache Ignite缓存基本操作实例详解

《ApacheIgnite缓存基本操作实例详解》文章介绍了ApacheIgnite中IgniteCache的基本操作,涵盖缓存获取、动态创建、销毁、原子及条件更新、异步执行,强调线程池注意事项,避免... 目录一、获取缓存实例(Getting an Instance of a Cache)示例代码:二、动态

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间