MFC自定义CStatusBar文字的颜色
MFC里面的CStatusBar是没法自定义文字颜色的,需要我们自己绘制。这篇文章是在 Display colored text on Status Bar 代码的基础上进行改进的,使用起来更方便。
实现新建一个单文本框架的MFC程序,如下图所示:

在MainFrm.h中,在类定义之前引入头文件:
#include " ColoredStatusBarCtrl.h"
将MainFrm.h中的m_wndStatusBar换成CColoredStatusBarCtrl类型,代码如下:
//CStatusBar m_wndStatusBar;
CColoredStatusBarCtrl m_wndStatusBar;
找到MainFrm.cpp中自动生成的数组,代码如下:
static UINT indicators[] =
{
ID_SEPARATOR, // 状态行指示器
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
在CMainFrame::OnCreate()函数 return 之前初始化 m_wndStatusBar,代码如下:
//可以设置自动大小
m_wndStatusBar.AutoSize = true;
//初始化每个窗格
for (int i = 0; i < sizeof(indicators) / sizeof(UINT); i++)
{
CString str;
str = " ";
//更改状态栏样式,使其由所有者绘制
bool ret = m_wndStatusBar.GetStatusBarCtrl().SetText(str, i, SBT_OWNERDRAW);
//使每个窗格的大小相同
m_wndStatusBar.SetPaneInfo(i, m_wndStatusBar.GetItemID(i), SBT_OWNERDRAW, 100);
}
//设置字符串
CString str;
str = "123";
m_wndStatusBar.SetText(m_wndStatusBar.CommandToIndex(ID_INDICATOR_NUM), str, RGB(255, 0, 0));
ColoredStatusBarCtrl.h 文件内容如下:
#if !defined(AFX_COLOREDSTATUSBARCTRL_H__4D49433F_617D_45A5_A207_5655A0BE779F__INCLUDED_)
#define AFX_COLOREDSTATUSBARCTRL_H__4D49433F_617D_45A5_A207_5655A0BE779F__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif
#include <afxext.h>
class CColoredStatusBarCtrl : public CStatusBar
{
public:
CColoredStatusBarCtrl();
public:
CString m_szStatusString;
public:
bool AutoSize=true;
void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
void SetText(UINT nID, CString txt, COLORREF cr);
public:
virtual ~CColoredStatusBarCtrl();
protected:
CMap<UINT, UINT, COLORREF, COLORREF>m_TxtColorMap;
CMap<UINT, UINT, CString, CString>m_TxtMap;
DECLARE_MESSAGE_MAP()
};
#endif
ColoredStatusBarCtrl.cpp 文件内容如下:
// ColoredStatusBarCtrl.cpp : implementation file
//
#include "pch.h"
//#include "dlgviewtest.h"
#include "ColoredStatusBarCtrl.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CColoredStatusBarCtrl::CColoredStatusBarCtrl(){}
CColoredStatusBarCtrl::~CColoredStatusBarCtrl(){}
BEGIN_MESSAGE_MAP(CColoredStatusBarCtrl, CStatusBar)
//{{AFX_MSG_MAP(CColoredStatusBarCtrl)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CColoredStatusBarCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// Attach to a CDC object
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
dc.SetBkMode(TRANSPARENT);
// Get the pane rectangle and calculate text coordinates
CRect rect(&lpDrawItemStruct->rcItem);
COLORREF cr;
CString txt;
if (m_TxtColorMap.Lookup(lpDrawItemStruct->itemID, cr))
{
dc.SetTextColor(cr);
}
if (m_TxtMap.Lookup(lpDrawItemStruct->itemID, txt))
{
dc.TextOut(rect.left + 2, rect.top, txt);
if (AutoSize)
{
//设置提示框宽度
CSize sz = dc.GetTextExtent(txt);
SetPaneInfo(lpDrawItemStruct->itemID, lpDrawItemStruct->CtlID, SBT_OWNERDRAW, sz.cx);
}
}
// Detach from the CDC object, otherwise the hDC will be
// destroyed when the CDC object goes out of scope
dc.Detach();
}
void CColoredStatusBarCtrl::SetText(UINT nID,CString txt, COLORREF cr)
{
m_TxtColorMap.SetAt(nID, cr);
m_TxtMap.SetAt(nID, txt);
//触发重绘
SetPaneText(nID, txt);
}
附件:ColorstatusbarDemo 提取码: vhrs
MFC自定义CStatusBar文字的颜色的更多相关文章
- css3应用之自定义选中文字的背景颜色
在看很多的博客主题时候发现大多数都对选中文字的背景颜色做了相应的处理.其实这样是很符合用户体验的.因为有很多的人会用鼠标选择着一行一行的阅读.其中就包括本人... 浏览器中默认的选中的文字颜色为白色, ...
- 使用系统UITabbarItem自定义图片显示原本颜色和自定义文字颜色
...... ThirdViewController *thirdVC = [[ThirdViewControlleralloc]initWithTitle:@"搜索信息"]; / ...
- Android SearchView 自定义SearchIcon和字体颜色大小
自定义SearchView的搜索图标和字体属性相对复杂一些,记下来. 一.自定义SearchIcon 1.API版本低于21:版本小于21时,要修改SearchIcon比较复杂,需要先获取到Searc ...
- WPF自定义空心文字
首先创建一个自定义控件,继承自FrameworkElement,“Generic.xaml”中可以不添加样式. 要自定义空心文字,要用到绘制格式化文本FormattedText类.FormattedT ...
- Android之自定义画图文字动画
结构: BaseView: package com.caiduping.canvas; import android.content.Context; import android.graphics. ...
- MPAndroidChart柱子上的文字的颜色dataSet.setValueTextColors
版本:MPAndroidChart v3.1.0 这是个很强大的图表,不同的版本对应的API会不一样. 需求描述: 用了柱状图,但要实现这样的功能,通过不同的门店来区分不同的柱子的颜色,并且柱子上文字 ...
- Android实现自定义带文字和图片的Button
Android实现自定义带文字和图片的Button 在Android开发中经常会需要用到带文字和图片的button,下面来讲解一下常用的实现办法. 一.用系统自带的Button实现 最简单的一种办法就 ...
- iOS开发中设置UITextField的占位文字的颜色,和光标的颜色
在iOS开发中,对于很多初学者而言,很有可能碰到需要修改UITextField的占位文字的颜色,以及当UITextField成为第一响应者后光标的颜色,那么下面小编就介绍一下修改占位文字和光标的颜色. ...
- android textview改变部分文字的颜色和string.xml中文字的替换(转)
转 :http://blog.csdn.net/ljz2009y/article/details/23878669 一:TextView组件改变部分文字的颜色: TextView textView ...
- iOS7 修改导航系统默认返回按钮文字及颜色
//iOS7 修改系统默认返回按钮文字及颜色 UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"返" ...
随机推荐
- vue-cli3创建多页面应用
首先用vue-cli3创建工程,我的全局安装了vue-cli2,又不想卸载掉:所以新建了一个文件夹安装vue-cli3:然后在该文件夹下创建工程: 同时安装vue-cli2和vue-cli3参考:ht ...
- 论文精读:用于少样本图像识别的语义提示(Semantic Prompt for Few-Shot Image Recognition)
原论文于2023.11.6撤稿,原因:缺乏合法的授权,详见此处 Abstract 在小样本学习中(Few-shot Learning, FSL)中,有通过利用额外的语义信息,如类名的文本Embeddi ...
- SpringBoot 多模块开发 笔记(一)
多模块开发 简易版 dao 层 也可以说是 Mapper 层 web 层 将 controller 放在这一层 还有 统一返回类型 和 自定义异常 也在放在这里 启动类也放在这里 model 层 也就 ...
- 教你用JavaScript实现进度条
案例介绍 欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个进度条.进度条数字自动增加,条状图片动画演示进度完成度.通过实战我们将学会函数fun ...
- ehlib组件包当中TDBLookupComboboxEh的小结
TDBLookupComboboxEh和TDBGridEh一样强大无比,可以做出Combobox下拉出Grid的效果.下面是一些重要属性的小结(可怜费了我半天功夫,文档太少了.......)(1)Li ...
- SQLWorkbench使用自定义JDBC驱动连接数据库
一.Windows上使用SQLWorkbench 1. 添加CloudDB的驱动,点击"Manage Driver". Name : Fandatsys-CDB sample U ...
- MYSQL 1 DAY
目录 MySQL 1.sql.DB.DBMS分别是什么,他们之间的关系? 2.什么是表? 3.学习MySQL主要还是学习通用的SQL语句,那么SQL语句包括增删改查,SQL语句怎么分类呢? 4.导入数 ...
- 2023年多校联训NOIP层测试5
2023年多校联训NOIP层测试5 T1 糖果 \(10pts\) 首先考虑一些异或的性质: 归零率:\(a \bigoplus a=0\) 恒等律:\(a \bigoplus 0=a\) 交换律:\ ...
- Linux 中iostat 命令详解
iostat命令详解 iostat 主要是统计 磁盘活动情况. iostat有以下缺陷: iostat的输出结果大多数是一段时间内的平均值,因此难以反映峰值情况iostat仅能对系统整体情况进行分析汇 ...
- look命令
look命令 look命令用于查询单词,仅需指定欲查询的字首字符串,它会显示所有开头字符串符合该条件的单词. 语法 look [-bdf] [-t char] string [file ...] 参数 ...