[纯GDI]23行代码实现不规则半透明窗口(附源码)

weiwuyuan 2012-09-21 04:26:42
加精
以前在研究不规则半透明窗口的时候,用的是gdi的TextOut/DrawText绘制字体,但绘制出的字体是透明的,
现在我完全放弃了GDI的TextOut()、BitBlt()的方式,而用SetDIBitsToDevice()代替,就是直接贴像素到DC里。

今天尝试用SetDIBitsToDevice()+UpdateLayeredWindow()实现不规则半透明窗口,结果非常顺利!
贴出来,共享给需要的朋友.

另外,本程序还附带了一个使用MMX汇编优化的32位alpha混合函数(57行,有详尽注释),需要的朋友可以直接copy了。

PS:关于字体的绘制
我建议大家用GetGlyphOutline()手动提取字形像素去绘制,因为TextOut这类绘制函数功能有限,只适合初级软件使用,而要想画出丰富多彩的界面,比如字体alpha渐变,就必须自己操作像素,所以GetGlyphOutline()才是专业级的,而且兼容性好,可以抽象出来提供给ddraw、d3d、opengl等使用

截图:


下载地址:
稍等。.
新的源码下载地址:http://download.csdn.net/detail/weiwuyuan/4595485
...全文
9505 183 打赏 收藏 转发到动态 举报
写回复
用AI写文章
183 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cherish_ize 2013-11-19
  • 打赏
  • 举报
回复
这个好啊, 对了,LZ你有没MMX的学习资料?
adasir 2013-10-17
  • 打赏
  • 举报
回复
感谢分享啊!好东西
海xs 2013-07-09
  • 打赏
  • 举报
回复
引用 179 楼 flysky862 的回复:
[quote=引用 30 楼 weiwuyuan 的回复:] 来个漂亮的界面:
这种能不能支持个代码,不胜感激[/quote] 这个看起来很不错,
海xs 2013-07-09
  • 打赏
  • 举报
回复
厉害,虽然不懂
大海008 2013-07-06
  • 打赏
  • 举报
回复
引用 30 楼 weiwuyuan 的回复:
来个漂亮的界面:
这种能不能支持个代码,不胜感激
china_jeffery 2013-02-07
  • 打赏
  • 举报
回复
楼主,你很牛*
Simao 2013-02-07
  • 打赏
  • 举报
回复
看看,收藏备用!
Kaile 2013-02-05
  • 打赏
  • 举报
回复
好东西,学习下。。。。。。。。。。。
水瓶座雨夕 2013-02-05
  • 打赏
  • 举报
回复
感谢分享 学习 学习
wxf041041 2013-02-05
  • 打赏
  • 举报
回复
学习,本人也要往图形方面发展了··
  • 打赏
  • 举报
回复
回复LZ(120L、121L): 呵呵,关于您提到的字形提取,交流一下。本人前一个工作单位就是专业做排版软件的(报业、商业),word这种文字处理软件跟排版软件不是一个重量级的:) 我们确实用的是GDI+,因为要绘制很多种类的特效,字形提取确实也用了,但只是用在与字形相关的特效(如文字勾边、文字转曲线、文字渐变)。 我个人研究过OpenGL,这款引擎唯一的弱势就是文字输出,它不像GDI/GDI+一样直接支持字体,只能做字形提取并转换为曲线组再输出,这个过程效率非常低(3D引擎对效率的要求是极高的)。如果是西文,这一过程可以预做,但汉字不行,数量级太大了。DirectX一直没抽出时间来研究,不清楚是否直接支持字体。
小段儿 2013-02-04
  • 打赏
  • 举报
回复
我靠 这帖子就好久前的。。。当我啥也没说
小段儿 2013-02-04
  • 打赏
  • 举报
回复
我就觉得我好久前就下载过这个例子,打开一看就是好久前的例子,不错。
q84998875 2013-02-04
  • 打赏
  • 举报
回复
果断收藏!!!
Li_Carey 2012-12-29
  • 打赏
  • 举报
回复
学习了.....
zhouquan1986721 2012-12-29
  • 打赏
  • 举报
回复
感谢分享!!!
big__world 2012-11-20
  • 打赏
  • 举报
回复
学习一下!!!
shuang_yi 2012-10-09
  • 打赏
  • 举报
回复
下载不了啊
zhou1xp 2012-10-08
  • 打赏
  • 举报
回复
做个标记
Reverse.King 2012-10-08
  • 打赏
  • 举报
回复
首先赞一个,代码我用VS2012编译了没有任何问题,至于占用CPU的问题我也看了,源代码的确是占用CPU我机器上有12-15%的占用,这个问题解决其实很简单,在MainLoop()循环处加上sleep(1),前后均可,CPU占用立马为0-2%.
加载更多回复(129)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧