gpt4 book ai didi

c++ - 包含不透明文本和按钮的透明窗口

转载 作者:太空狗 更新时间:2023-10-29 23:31:50 24 4
gpt4 key购买 nike

我正在创建一个非侵入式弹出窗口,以便在处理耗时操作时通知用户。目前,我通过调用 SetLayeredWindowAttributes 来设置它的透明度,这给了我一个合理的结果:

alt text http://img6.imageshack.us/img6/3144/transparentn.jpg

但是我希望文本和关闭按钮显示为不透明(白色文本看起来不太正确)同时保持背景透明 - 有办法做到这一点吗?

最佳答案

为了在分层窗口中执行“适当的”alpha,您需要通过调用 UpdateLayeredWindow 为窗口管理器提供 PARRGB 位图。

据我所知,最简洁的实现方式如下:

  1. 使用 PixelFormat32bppPARGB 像素格式创建 GDI+ Bitmap 对象。
  2. 创建一个 Graphics 对象以在此 Bitmap 对象中绘制。
  3. 使用 GDI+ 将所有绘图绘制到此对象中。
  4. 销毁第 2 步中创建的 Graphics 对象。
  5. Bitmap 对象调用 GetHBITMAP 方法以获取 Windows HBITMAP
  6. 销毁 Bitmap 对象。
  7. 使用 CreateCompatibleDC 创建一个内存 DC,然后选择第 5 步中的 HBITMAP
  8. 使用内存 DC 作为源调用 UpdateLayeredWindow。
  9. 选择之前的位图并删除内存DC。
  10. 销毁第 5 步中创建的 HBITMAP

此方法应允许您控制绘制的所有内容的 alpha channel :背景透明,文本和按钮不透明。

此外,由于您要输出文本,我建议您调用 SystemParametersInfo 来获取默认的抗锯齿设置 (SPI_GETFONTSMOOTHING),然后调用 Graphics 对象上的 SetTextRenderingHint 将抗锯齿类型设置为与用户配置的相同类型,以获得更好的外观。

关于c++ - 包含不透明文本和按钮的透明窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1294805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com