- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
创建有个性的对话框之MFC篇
创建有个性的对话框之MFC篇/06/0705/10/2L8TSJJ600091LRC.html/06/0705/10/2L8TSJJ600091LRC.html想使自己的软件与众不同就要给软件加点“色”,一个颜色搭配协调的窗口要比windows千篇一律的灰底黑字更能吸引别人的眼球。设想如果html浏览器显示的网页都是白底黑字,还会有那么多的mm喜欢上网吗?可能互联网的人气将下降一半。做个出色的界面对于老手来说可能不在话下,但是对于新手来说还是无从下手,使用BCGControlBar和Xtreme Toolkit是个很好的选择,不过对于一个小程序使用这么大的库未免有头重脚轻的感觉。其实不使用这些庞然大物一样可以做个很“色”的界面,本文就结合CSDN论坛上经常被问起的问题,介绍几个给对话框上色的方法。本文的方法都是针对MFC程序的,其他方法请参看“创建有个性的对话框之ATL/WTL篇”。第一步:改变对话框的背景颜色如何改变对话框的背景颜色这个问题常常出现在论坛上,可见大家对Windows默认的灰色对话框是多么不满。MFC程序修改对话框的背景和文字颜色最简单的方法就是调用SetDialogBkColor函数,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控件的颜色。不使用SetDialogBkColor函数,直接编写代码控制对话框的背景颜色和控件文字颜色也不是很困难的事情,并且这种方法能够提供更灵活的颜色设置方案,比如对不同类型的控件使用不同的文字颜色,使用高亮度的背景颜色突出某个控件等等,最重要的是能够控制Edit控件的文字和背景颜色,下面就介绍这种方法。首先是改变对话框的背景颜色。当Windows系统需要重画某个窗口客户区的背景的时候,就会向该窗口发送WM_ERASEBKGND 消息,窗口的处理过程响应这个消息重新画窗口的背景,这个过程称之为“自画”。改变对话框的背景颜色的原理很简单,就是响应这个消息,用自定义的颜色填充对话框的客户区背景,代替对话框窗口默认的背景填充动作。许多新手经常问:“为什么在class wizard中找不到对话框的WM_ERASEBKGND消息,是不是对话框没有这个消息”?其实对话框也是窗口,它也有WM_ERASEBKGND消息,只是MFC的class wizard使用的dialog过滤器将其过滤掉了(只是在message窗口的显示中过滤了,并不是真的不响应这个消息),为的是代码编写过程中突出对话框专有的消息和控件事件。如图.2 所示,只要在class wizard中的“class info” table标签下将消息过滤器改成Windows就可以在对话框的消息列表中看到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的控件向其父窗口发送最频繁的通知消息之一,例如,许多控件发送WM_CTLCO
您可能关注的文档
- 创伤综合征(xiugai).ppt
- 创伤救护技术.ppt
- 创伤(止血与包扎).ppt
- 创伤诊断处理.ppt
- 创建学习型科室的认识和实践.pptx
- 刘邹钰(青年技术突击队PPT).ppt
- 创建虚拟桌面集合.docx
- 创建虚拟目录.ppt
- 创意婚礼策划方案与创意.doc
- 创意 美术绘画教案 深秋梧桐叶.pptx
- 2025-2026学年统编版语文七年级上册第六单元整本书阅读《西游记》练习(含解析.docx
- 广东省汕头市澄海区2025-2026学年九年级上学期期末质量监测道德与法治预测卷(含答案).docx
- 大学生“实习协议”的法律性质.docx
- 心理咨询师技能题目及详解.doc
- 羊群行为的LSV模型在股票市场的实证应用.docx
- AI军备竞赛的终点,或是一场关于铀的“全球狩猎”.docx
- 二手房阴阳合同效力及案例.docx
- 2025-2026学年北京市牛栏山一中高一创新班期中考试英语试题(含答案).docx
- 甘肃省酒泉市普通高中2025-2026学年高二上学期1月期末考试语文试卷(含答案).docx
- 2025-2026学年道德与法治九年级上学期统编版期末过关卷(含答案).docx
原创力文档


文档评论(0)