|
以前在研究半透明不规则窗口的时候,用的是gdi的TextOut/DrawText绘制字体,但绘制出的字体是透明的,2 {5 g# \3 B b& {. r9 y
现在我完全放弃了GDI的TextOut()、BitBlt()的方式,而用SetDIBitsToDevice()代替,就是直接贴像素到DC里。9 B! Q" ]5 t$ k- o
7 \7 n/ k. U, P9 D0 T今天尝试用SetDIBitsToDevice()+UpdateLayeredWindow()实现半透明不规则窗口,结果非常顺利!) a5 U) @( ^. o+ w& \/ b7 h" D
贴出来,共享给需要的朋友.
" Q/ h1 c" C, V f1 @0 ?9 n+ C' K/ n$ }
. h, u) b8 F6 G$ E另外,本程序还附带了一个使用MMX汇编优化的32位alpha混合函数(57行,有详尽注释),需要的朋友可以直接copy了。. U. D0 l' Q6 Z3 I: N
6 \0 `% Y! s8 y; M. C
PS:关于字体的绘制: e# q% t) n& n- ~" c1 q: E% Q
我建议大家用GetGlyphOutline()手动提取字形像素去绘制,因为TextOut这类绘制函数功能有限,只适合初级软件使用,而要想画出丰富多彩的界面,比如字体alpha渐变,就必须自己操作像素,所以GetGlyphOutline()才是专业级的,而且兼容性好,可以抽象出来提供给ddraw、d3d、opengl等使用
5 {5 v, O6 E# N& M
- b. k: L& }9 T资源下载地址和密码(百度云盘): [/hide] 百度网盘信息回帖可见( u, S. Q3 {( x, w
2 m( R; W6 E, X" \
9 {% V% P1 E1 F& |
0 K6 S. F: {8 s3 f6 g本资源由Java自学网收集整理【www.javazx.com】 |
|