- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图形界面任意形状图形按钮
图形界面上的任意形状图形按钮作者:effortsboysZYB
下载源代码摘要
随着计算机的发展和普及,人们对于软件的界面美观性要求越来越高。MFC提供了很多标准控件,比如按钮控件,按钮在MFC编程中有着较高的使用频率。本文将介绍如何实现在有背景图片的情况下,任意形状按钮的自绘方法。本文使用基于对话框工程程序进行演示。
关键字: VC++ 按钮 自绘 任意形状 图形
一、实现原理
我们知道windows窗口默认都是矩形,要实现任意形状的窗口就需要自绘。为此从CBUTTON派生一个按钮类CControlButton,重载DrawItem消息处理进行自绘。图片的背景是矩形的,假如我们的按钮图片是圆形的,当把图片绘制上去之后,我们发现多出了背景部分。如何消除背景呢?
为了解决这个问题,我们可以用BitBlt 中的MERGEPAINT和SRCAND的方式进行绘制。 MERGEPAINT是把图形反色后再同贴图目的地进行OR操作,而SRCAND是把图形和贴图目的地进行AND操作。在计算机中,使用的是数字图像处理,每一种颜色都是由RGB表示的,RGB是指红、绿、蓝三原色,只要有这3种颜色和对应的颜色强度就可以合成各种颜色了。比如,黑色的RGB值为(0,0,0),白色的RGB值为(255,255,255),括号内对应的是红绿蓝3种颜色的强度。在数字图像处理中可以实现OR、AND等逻辑运算。任何颜色同白色进行OR运算结果都为白色,进行AND运算结果都是该颜色本身;任何颜色跟黑色进行OR运算结果都为该颜色本身;进行AND运算结果都是黑色。为此,我们准备两张图片,如下图所示:
图1 ???????图2
图1的背景为白色,图2是将图1中需要显示部分填充黑色而得。实现去除背景贴图关键代码如下:
if (IsMask==TRUE) //值为真则去除图片背景
{
CDC MaskDC;
MaskDC.CreateCompatibleDC(pDC);
if (IsBackBmp==TRUE)//使用和主窗口相同的背景图片
{
CBitmap *pOldBmp;
CDC BackDC;
BackDC.CreateCompatibleDC(pDC);
pOldBmp = MaskDC.SelectObject(m_MaskBitmap);
BackDC.SelectObject(m_BackBitmap);
pDC-BitBlt(0,0,rect.Width(),rect.Height(),BackDC,BackRect.left,BackRect.top,SRCCOPY);
}
pDC-BitBlt(0,0,rect.Width(),rect.Height(),MaskDC,0,0,MERGEPAINT);
pDC-BitBlt(0,0,rect.Width(),rect.Height(),MemDC,0,0,SRCAND);
ReleaseDC(MaskDC);
}
else
{
pDC-BitBlt(0,0,rect.Width(),rect.Height(),MemDC,0,0,SRCCOPY);
}
MaskDC是图2的DC,MemDC为图1的DC。效果如下图所示:
可能这时你就纳闷了,为什么背景色还是白色呢,是不是代码没有去掉图片的背景色呢?答案是贴图的时候已经去掉了背景色。请看分析
按钮是一个子窗口,默认情况下主窗口和按钮子窗口背景都是白色,但是往往我们需要在主窗口上绘制一张图片,这样窗口看起来就比较美观。这样子做之后,按钮子窗口和主窗口的背景就不一样了。在进行按钮自绘的时候,那就是把按钮背景作为目的地进行OR、AND运算,因为按钮背景就是白色的,所以效果看起来也就是白色的。
要解决这个问题也很简单,我们获取按钮所在主窗口中的矩形区域,把这个区域的主窗口背景绘制到按钮中,再进行绘制按钮图片的操作就可以了。
通过这样做之后,效果如下图:
为此,我们已经得到一个图片按钮了。但仅仅这样还不行,这按钮的响应区域还是矩形区域,也就是说除了按钮图片之外的区域也响应鼠标点击。那我们就需要构造一个按钮图片区域,使用库函数SetWindowRgn就可以确定响应区域了。SetWindowRgn有个参数为HRGN类型,因此我们需要获得一个HRGN。
Jean-Edouard Lachand-Robe
您可能关注的文档
- CJ的CF卡使用.docx
- 100测评网_Unit7 A busy day A卷小五英语下学期.doc
- EC第一章习题无答案.doc
- 七下+Unit6全单元学案.doc
- 七年级上 Unit 1 Section A 导学案.doc
- 典藏书屋--睿智人生(英文word版).doc
- 英语口语集粹 来源.doc
- 沿河三中八年级上英语联赛试题.doc
- 2015海口市小学毕业考试命题范围.doc
- 七上 Unit3-U5教师版.doc
- 苏教版8年级上册数学全册教学课件(2021年10月修订).pptx
- 比师大版数学4年级下册全册教学课件.pptx
- 冀教版5年级上册数学全册教学课件.pptx
- 办公室普通党员2024年组织生活会个人对照检查发言材料供参考.docx
- 领导班子成员2025年组织生活会“四个带头”对照检查材料范文.docx
- 2024年度专题组织生活会个人“四个带头”对照检查材料范文.docx
- 党支部领导班子2025年民主生活会“四个带头”个人对照检查材料范文.docx
- 2024年抓基层党建工作述职报告参考范文.docx
- 2024年度民主生活会征求意见情况的报告范文2篇.docx
- 普通党员2024年组织生活会个人“四个带头”对照检查发言材料2篇.docx
最近下载
- 重大社样章-成长英语学生用书进阶篇.pdf
- 财务岗位招聘笔试题(某大型国企)精练试题详解.docx VIP
- 2025单招面试技巧完整版 .pdf VIP
- 汉语语法:词性.pdf VIP
- 2024年生猪屠宰兽医卫生检验人员考试题库.pdf
- 51单片微型机原理和接口教程 周思跃 著 课后习题答案 化学工业出版社 51单片微型机原理和接口教程 周思跃 著 课后习题答案 化学工业出版社.doc
- 2025年第六届国家版图知识竞赛题库及答案.pdf VIP
- 商务谈判(毕思勇第四版)PPT课件-第二章-商务谈判的准备工作.pptx VIP
- 社会调查研究方法教学课件电子教案全套课件.pptx
- 临床护理教学师资培训课件.pptx
文档评论(0)