没有合适的资源?快使用搜索试试~ 我知道了~
创建有个性的对话框之MFC篇.pdf )
3星 · 超过75%的资源 需积分: 10 9 下载量 31 浏览量
2011-09-14
15:56:57
上传
评论
收藏 398KB PDF 举报
温馨提示
试读
20页
创建有个性的对话框之MFC篇.pdf )创建有个性的对话框之MFC篇.pdf )
资源推荐
资源详情
资源评论
创建有个性的对话框之 MFC 篇
想使自己的软件与众不同就要给软件加点“色”,一个颜色搭配协调的窗口要比
windows 千篇一律的灰底黑字更能吸引别人的眼球。设想如果 html 浏览器显示的网页都是
白底黑字,还会有那么多的 mm 喜欢上网吗?可能互联网的人气将下
想使自己的软件与众不同就要给软件加点“色”,一个颜色搭配协调的窗口要比 wind
ows 千篇一律的灰底黑字更能吸引别人的眼球。设想如果 html 浏览器显示的网页都是白底
黑字,还会有那么多的 mm 喜欢上网吗?可能互联网的人气将下降一半。做个出色的界面对
于老手来说可能不在话下,但是对于新手来说还是无从下手,使用 BCGControlBar 和 Xtrem
e Toolkit 是个很好的选择,不过对于一个小程序使用这么大的库未免有头重脚轻的感觉。
其实不使用这些庞然大物一样可以做个很“色”的界面,本文就结合 CSDN 论坛上经常被问
起的问题,介绍几个给对话框上色的方法。本文的方法都是针对 MFC 程序的,其他方法请参
看“创建有个性的对话框之 ATL/WTL 篇”。
第一步:改变对话框的背景颜色
如何改变对话框的背景颜色这个问题常常出现在论坛上,可见大家对 Windows 默认的
灰色对话框是多么不满。MFC 程序修改对话框的背景和文字颜色最简单的方法就是调用 Set
DialogBkColor 函数,SetDialogBkColor 是 CWinApp 类的成员函数,以下是该函数的原型:
void CWinApp::SetDialogBkColor(COLORREF clrCtlBk, COLORREF clrCtlText);
请注意,SetDialogBkColor 函数并不是对 Windows 的某个 API 的封装,他是 MFC 框架
的一部分,所以不使用 MFC 的程序也就不能享受这种方便。这个函数的使用很简单,在程序
的 CWinApp 派生类的 InitInstance 函数中添加一行代码就行了:
SetDialogBkColor(RGB(188,197,230),RGB(13,125,188));
图.1 就是运行效果:
图.1 SetDialogBkColor 效果图
使用 SetDialogBkColor 也有局限的地方,那就是所有的控件文字颜色都一样,不能针
对不同的控件设置不同的文字颜色,还有就是不能设置 Edit 控件的颜色。不使用 SetDialo
gBkColor 函数,直接编写代码控制对话框的背景颜色和控件文字颜色也不是很困难的事情,
并且这种方法能够提供更灵活的颜色设置方案,比如对不同类型的控件使用不同的文字颜
色,使用高亮度的背景颜色突出某个控件等等,最重要的是能够控制 Edit 控件的文字和背
景颜色,下面就介绍这种方法。
首先是改变对话框的背景颜色。当 Windows 系统需要重画某个窗口客户区的背景的时
候,就会向该窗口发送 WM_ERASEBKGND 消息,窗口的处理过程响应这个消息重新画窗口的
背景,这个过程称之为“自画”。改变对话框的背景颜色的原理很简单,就是响应这个消息,
用自定义的颜色填充对话框的客户区背景,代替对话框窗口默认的背景填充动作。许多新手
经常问:“为什么在 class wizard 中找不到对话框的 WM_ERASEBKGND 消息,是不是对话框
没有这个消息”?其实对话框也是窗口,它也有 WM_ERASEBKGND 消息,只是 MFC 的 class w
izard 使用的 dialog 过滤器将其过滤掉了(只是在 message 窗口的显示中过滤了,并不是
真的不响应这个消息),为的是代码编写过程中突出对话框专有的消息和控件事件。如图.
2 所示,只要在 class wizard 中的“class info” table 标签下将消息过滤器改成 Windo
ws 就可以在对话框的消息列表中看到 WM_ERASEBKGND 了。
图.2 修改消息过滤器
现在通过 class wizard 添加 WM_ERASEBKGND 的消息响应函数,并如下所示修改这个函
数:
BOOL CCustDlgDlg::OnEraseBkgnd(CDC* pDC)
{
CRect rcClient;
GetClientRect(&rcClient);
pDC->FillRect(&rcClient,&m_brBkgnd);
return TRUE;
//return CDialog::OnEraseBkgnd(pDC);
}
m_brBkgnd 是个 CBrush,在此之前已经初始化过了,关键代码是最后返回 TRUE,而不
是默认的调用基类函数,返回 TRUE 意在告诉 Windows:“我已经画过背景了,你不要再画
了”。现在来看看运行的效果:
图.3 重画背景的效果
使用位图作为对话框的背景也不难,就是在整个客户区画一个位图背景,
第二步:改变控件的颜色
看起来不如刚才效果好,控件文字的颜色和背景色都没有改变,这是因为我们还没有
处理 WM_CTLCOLOR 消息。WM_CTLCOLOR 是 Windows 的控件向其父窗口发送最频繁的通知消息
剩余19页未读,继续阅读
资源评论
- 花er2012-10-10就是改变控件的颜色与背景。。。没什么新的知识
孑虫
- 粉丝: 42
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功