MFC自绘带背景颜色标题栏
最近在写一个EDID文件生成器,可以根据输入的一些参数生成EDID文件,大多数字节是固定的,主要是详细时序这几个字节的计算,界面用的是MFC,不过我重绘了,因为MFC原生界面太丑了。下图是EDID生成器初步的效果:
本文主要讲怎么绘制带颜色的标题栏,就像上图的蓝色背景标题栏。
1)首先是根据向导创建一个普通对话框程序,然后修改对话框Border属性为None。
2)在void XXXXDlg::OnPaint()函数中加入如下绘制代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
void xxxxDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CPaintDC dc(this);
Graphics graph(dc);
RECT rc;
SolidBrush titleBrush(Color(20, 150, 250));
SolidBrush bottomBrush(Color(20, 150, 250));
// 获取对话框大小
GetClientRect(&rc);
// 绘制标题栏
graph.FillRectangle(&titleBrush, rc.left, rc.top, rc.right-rc.left, 23);
//绘制底部边框
graph.FillRectangle(&bottomBrush, rc.left, rc.bottom-5, rc.right-rc.left, 5);
dc.SetBkColor(RGB(20, 150, 250));
//设置标题栏文字
dc.SetTextColor(RGB(255, 255, 255));
dc.TextOut(4,4,_T("EDIDCreator"));
DeleteObject(&titleBrush);
DeleteObject(&bottomBrush);
ReleaseDC(&dc);
CDialog::OnPaint();
}
}
|
代码中我除了绘制标题栏,还绘制了程序底部的边框。
3)响应鼠标点击标题栏消息,实现鼠标拖动。在对话框的OnLButtonDown消息中添加如下代码:
1
2
3
4
5
6
7
8
9
10
|
void xxxxDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// 判断是否在标题栏,点击移动标题栏
if ((point.y > 0) && (point.y < 25))
{
PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y));
}
CDialog::OnLButtonDown(nFlags, point);
}
|
到此就大功告成了,实现了一个蓝色背景的标题栏。在后面的文章中我还会介绍如何完善该标题栏,加入关闭,最小化按钮。
- 本文固定链接: http://blog.jianchihu.net/mfc-draw-color-titlebar.html
- 转载请注明: Jianchihu 2015年06月25日 于 Jianchihu 发表
MFC自绘带背景颜色标题栏相关推荐
- html table转excel单元格带背景颜色
html table转excel单元格带背景颜色 在浏览器端将html的table转成Excel,可以参考下面的库 https://github.com/JackGit/table2excel.js ...
- VC/MFC如何设置对话框背景颜色
方法一:调用CWinApp类的成员函数SetDialogBkColor来实现. (这个函数已经废弃) ? 1 void SetDialogBkColor(COLORREF clrCtlBk = RG ...
- MFC开发IM-第十一篇、MFC设置对话框的背景颜色及设置透明
转载自:http://blog.sina.com.cn/s/blog_673ccb5b01010uwr.html 设置背景颜色: 我用了很多方法都不行,查了很多资料,现在说一下解决方案吧. ...
- 转型之路之Excel单元格按数值显示带背景颜色进度条
汇报工作进度时,很多人Excel 经常是这样的: 但领导希望看到内容通常是这样的: 这个功能怎么实现呢? 下面说下Excel单元格如何按数值显示一个背景颜色的进度条,以WPS Office为例: 注意 ...
- 修改基于formView的MFC单文档背景颜色
方法: (1)先调出BOOL CXXXView::OnEraseBkgnd(CDC* pDC)函数.刚开始从类向导的虚函数中搜索OnEraseBkgnd,发现怎么也找不到(不知道是不是只有我一人这样, ...
- 如何自己手动修改win10磁贴背景颜色?
前言 当我们安装完应用后,可以选择将应用图标固定到"开始"屏幕,于是就会产生一个磁贴,有的应用会自带背景颜色,有的则是默认的主题色.其实这个只不过是应用本身没有没有去适配win10 ...
- 【MFC】带背景的工具栏
00. 目录 文章目录 00. 目录 01. 案例概述 02. 开发环境 03. 关键技术 04. 程序设计 05. 秘笈心法 06. 源码下载 07. 附录 01. 案例概述 带背景的工具栏可以为程 ...
- 【VS开发】VS2010 MFC中控件、对话框等背景颜色动态修改的方法
[VS开发]VS2010 MFC中控件.对话框等背景颜色动态修改的方法 标签(空格分隔):[VS开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明: ...
- MFC 之 控件的颜色、字体、背景设置
实现WM_CTLCOLOR消息 HBRUSH CtestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) {HBRUSH hbr = CDia ...
- VS2010 MFC中改变static字体颜色、大小、背景颜色(自定义类),及手动关联变量的方法...
在MFC的Dialog工程中生成一个CStatic的自定义类,类名例如为:CColorStatic 定义必要的变量: protected:COLORREF m_crText; // 字体颜色COLOR ...
最新文章
- 数字资产云交易所搭建开发平台,云交易的优势在哪?
- asp.net c#截取指定字符串函数
- 尚硅谷_MySQL常见命令介绍
- 一个简单易用的图标字体库和CSS框架fontawesome
- [C++] GCC multilib
- Android 系统性能优化(29)---给 App 提速:Android 性能优化总结
- 电脑上如何进行录屏?
- SQL Server 2008数据备份与还原
- CSS---px rpx pt em rem四种单位总结
- @4-1 CCF 2020-06-1 线性分类器
- 笔记本html连接电视机,详细教您笔记本连接电视
- Linux下 Xpad不能移动拖动 解决办法
- 【BUUCTF】reverse2
- 胡玮炜离职,摩拜成美团大包袱,王兴后悔了吗?
- 电信光猫获取超级管理密码
- VMware vSphere Hypervisor 7(ESXi 7)
- PyTorch实例2——文本情绪分类器
- 基于BP神经网络预测日本麻将立直听牌
- android 音乐播放器评测,谁强大还省资源 六款主流Android音乐播放器评测
- Gradle 构建速度优化