用TextOut/DrawText画文字时候的奇怪问题 ( 积分: 100 )

  • 主题发起人 主题发起人 寒水
  • 开始时间 开始时间

寒水

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在窗口上面显示文字<br><br>程序里面把一个窗口弄成了Layered Window<br>然后建立了一个CompatibleDC用SelectObject把一个PNG图像连同Alpha通道复制到窗口上面<br>然后用UpdateLayeredWindow把CompatibleDC里面的图像复制到DC上面<br>然后释放了所有的DC,到这里,一切正常<br><br>接着这么做:<br>DC:=GetDC(handle);<br>SetBkMode(DC,TRANSPARENT);<br>SetTextColor(DC,$0000ff);<br>tGDIOBJ:=SelectObject(DC,hFont);<br>TextOut(DC,0,0,Pchar('test'),Length('test'));<br>SelectObject(DC,tGDIOBJ);<br>ReleaseDC(0,DC);<br>可是什么文字都没有出现```换用DrawText,结果一样<br><br>于是我在UpdateLayeredWindow之前直接把文字画到CompatibleDC里面,这回文字有了,可是更郁闷的事情出现了<br>尽管用了SetTextColor(DC,$0000ff) 可是文字变成全透明了,鼠标居然可以直接穿透文字点击窗口下面的东西,好像在窗口里面挖了个洞,但是文字又有一点点颜色(透明不彻底-_-``),而且文字的颜色很怪,设成0000ff以后,当窗口下面是深色的时候,显示出来的是粉红,当窗口下面是浅色的时候,红色又变淡了一下,如果窗口下面是白色,字就全部透明了,把TextOut改成DrawText,还是这样<br>截图:<br>http://tinypic.com/aeb2h3.jpg<br><br>怀疑是Alpha通道的问题,换了一张没有Alpha通道的PNG图像,问题依旧,但是在UpdateLayeredWindow的时候,如果把blendFunction里面的AlphaFormat改成AC_SRC_OVER(原来是AC_SRC_ALPHA),问题就解决了,可是这样一来`窗口背景PNG所带的Alpha通道的半透明就没有了,不行啊`<br><br>怎么办啊```大家帮帮忙`[?][?]
 
我想在窗口上面显示文字<br><br>程序里面把一个窗口弄成了Layered Window<br>然后建立了一个CompatibleDC用SelectObject把一个PNG图像连同Alpha通道复制到窗口上面<br>然后用UpdateLayeredWindow把CompatibleDC里面的图像复制到DC上面<br>然后释放了所有的DC,到这里,一切正常<br><br>接着这么做:<br>DC:=GetDC(handle);<br>SetBkMode(DC,TRANSPARENT);<br>SetTextColor(DC,$0000ff);<br>tGDIOBJ:=SelectObject(DC,hFont);<br>TextOut(DC,0,0,Pchar('test'),Length('test'));<br>SelectObject(DC,tGDIOBJ);<br>ReleaseDC(0,DC);<br>可是什么文字都没有出现```换用DrawText,结果一样<br><br>于是我在UpdateLayeredWindow之前直接把文字画到CompatibleDC里面,这回文字有了,可是更郁闷的事情出现了<br>尽管用了SetTextColor(DC,$0000ff) 可是文字变成全透明了,鼠标居然可以直接穿透文字点击窗口下面的东西,好像在窗口里面挖了个洞,但是文字又有一点点颜色(透明不彻底-_-``),而且文字的颜色很怪,设成0000ff以后,当窗口下面是深色的时候,显示出来的是粉红,当窗口下面是浅色的时候,红色又变淡了一下,如果窗口下面是白色,字就全部透明了,把TextOut改成DrawText,还是这样<br>截图:<br>http://tinypic.com/aeb2h3.jpg<br><br>怀疑是Alpha通道的问题,换了一张没有Alpha通道的PNG图像,问题依旧,但是在UpdateLayeredWindow的时候,如果把blendFunction里面的AlphaFormat改成AC_SRC_OVER(原来是AC_SRC_ALPHA),问题就解决了,可是这样一来`窗口背景PNG所带的Alpha通道的半透明就没有了,不行啊`<br><br>怎么办啊```大家帮帮忙`[?][?]
 
SetBkMode(DC,TRANSPARENT);不是透明了嗎
 
这个是设置背景透明,可是怎么连文字也透明了啊``
 
后退
顶部