CAnimateButton的实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MFC 动画按钮(异形透明渐变滑过声效等)的实现(一)- 切图透明渐变 源码下载: 页面底部 (麻烦大家在地址栏里面输一下,百度文档里面不准带文字链接的,所以只能运用图片了!) C瓜哥终于实现CAnimateButton类了,写下来给大家分享下! 先看一下效果: PostScript: 新浪的压缩率实在是太高了,把我1个多G的完全无压缩视频压缩成这样儿了!真是的!!大家凑合看一下~ (视频) P.S.就是简单的图像按钮,从网上下来的代码,很多人都做得特别复杂。估计是用的方法是win95时代的方法,所以实现切图都似乎很麻烦(连透明画图的函数都得自己写,实现起来就麻烦了),所以这一次,能用API的地方尽量用API,就不自己写了,这样的话实现起来简单点! 做好图片 把按钮的几态都放在一张图片里面,觉得这样方便些。 按顺序做好图片: Normal、Hovered、Pressed、(Focused、disabled) 最后两个为可选 如图: (设计缺口处,是为了观察异形切割按钮时的效果) 2)设置窗口样式 在PreSubclassWindow中实现: void CAnimateButton::PreSubclassWindow() { // TODO: Add your specialized code here and/or call the base class CButton::PreSubclassWindow(); ModifyStyle(0, BS_OWNERDRAW); //使图像不会被画到区域以外 /*1*/if (NULL != GetSafeHwnd()) { if (!(GetButtonStyle() WS_CLIPSIBLINGS)) SetWindowLong(GetSafeHwnd(), GWL_STYLE, GetWindowLong(GetSafeHwnd(), GWL_STYLE) | WS_CLIPSIBLINGS); } } ModifyStyle(0, BS_OWNERDRAW) 增加所有者自绘的样式,这样就不必为应用到该类的按钮都指定了! 上面/*1*/处,使图像不会画到按钮区域以外(这样,只要实现按钮区域异形就成了。在按钮上面画图时,图就用不着抠了~) 但是你可能会说,那图上的mask色又用来干嘛?这个当然是用来取得按钮区域了! 注:关于WS_CLIPCHILDREN (1)?WS_CLIPCHILDREN样式主要是用于父窗口,也就是说当在父窗口绘制的时候,父窗口上还有一个子窗口,那么设置了这个样 式的话,子窗口区域父窗口就不负责绘制。 (2)所有的overlapped和popup风格的窗口,都有WS_CLIPSIBLINGS?属性。也就是说这类风格的窗口,你是去不掉WS_CLIPSIBLINGS?属性的,不会在它重叠的兄弟窗口绘图; (3)更进一步说明,WS_CLIPSIBLINGS只是用于子窗口(For use with the WS_CHILD style only.) (4) WS_CLIPSIBLINGSz order)配合使用,才能看出明显的效果。 3)导入图像 准备好图像(文件或者图像资源),从 BOOL LoadBitmap(TCHAR* szFileName, COLORREF clrTans = RGB(255, 0, 255), BOOL bHasFocusedState = TRUE, BOOL bHasDisabledState = TRUE); BOOL LoadBitmap(UINT nIDBmp, COLORREF clrTans = RGB(255, 0, 255), BOOL bHasFocusedState = TRUE, BOOL bHasDisabledState = TRUE); 导入,取得图像句柄,然后把剩余参数一齐传给PrepareBitmap函数处理 void CAnimateButton::PrepareBitmap(HBITMAP hBitmap, COLORREF clrTrans, BOOL bHasFocusedState, BOOL bHasDisabledState) { m_bHasFocusedState = bHasFocusedState; m_bHasDisabledState = bHasDisabledState; //剪切透明区域 //--BitmapToRegion是一个SDK风格的全局函数,在主类中定义-- HRGN hRgn = BitmapToRegion(hBitmap, clrTrans, 4); Set

文档评论(0)

zxli + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档