|
以前在研究半透明不规则窗口的时候,用的是gdi的TextOut/DrawText绘制字体,但绘制出的字体是透明的,
" {7 f1 O) [* B) M+ \# D3 c& Q! i现在我完全放弃了GDI的TextOut()、BitBlt()的方式,而用SetDIBitsToDevice()代替,就是直接贴像素到DC里。
, F/ L% P: _4 J
. L0 t. o/ s ~; [* ^今天尝试用SetDIBitsToDevice()+UpdateLayeredWindow()实现半透明不规则窗口,结果非常顺利!8 b% J# D* s, m0 G
贴出来,共享给需要的朋友.
; V/ ~' r( ~2 v6 t4 r f) I& X; r0 @( J) x6 Q7 s- M! o! A3 ^! s
另外,本程序还附带了一个使用MMX汇编优化的32位alpha混合函数(57行,有详尽注释),需要的朋友可以直接copy了。3 P) q, t5 a2 X) [; ~* ^- {& P
& z# w0 l( Y1 h
PS:关于字体的绘制
; t8 y* c9 `8 y我建议大家用GetGlyphOutline()手动提取字形像素去绘制,因为TextOut这类绘制函数功能有限,只适合初级软件使用,而要想画出丰富多彩的界面,比如字体alpha渐变,就必须自己操作像素,所以GetGlyphOutline()才是专业级的,而且兼容性好,可以抽象出来提供给ddraw、d3d、opengl等使用
. D" G' K8 O, k9 A0 L" s$ G. `
/ T4 t% T1 j! m( X( [0 h资源下载地址和密码(百度云盘): [/hide] 百度网盘信息回帖可见
7 X, W8 s2 J7 e, K2 |
: H1 ^; Z# }5 M6 M$ N# I8 ^- J4 s4 u0 z1 R. @
}& }3 j% Z# e6 n
本资源由Java自学网收集整理【www.javazx.com】 |
|