IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 改变CTabCtrl控件字体颜色与背景 含实例vs2019 -> 正文阅读

[C++知识库]改变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

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 10:59:30  更:2022-05-05 11:02:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 4:15:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码