SetLayeredWindowAttributes对屏幕的影响

sungoco2 2008-11-27 11:28:44
我为了做一个圆角,桌面,用了此函数去做mask结果,在程序刚启动的一瞬间会有近一秒时间的黑屏,那个黑啊,真的很黑,怎么解决?

代码如下:
COLORREF maskColor = RGB(255, 0, 0);

SetWindowLong(GetSafeHwnd(),
GWL_EXSTYLE,
GetWindowLong(GetSafeHwnd(),
GWL_EXSTYLE) | WS_EX_LAYERED);

::SetLayeredWindowAttributes(GetSafeHwnd(),
maskColor,
255,
LWA_COLORKEY);
...全文
85 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
toneamok 2009-08-11
  • 打赏
  • 举报
回复
在XP下确实,只要设置透明,在切换的瞬间, 会黑一下子, vista下无此问题!! 很是奇怪!!
sungoco2 2008-12-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 Tinary3v0 的回复:]
把贴图的部分放到内存里面去做,最后再贴回屏幕。
很多程序加载的东西不一定就比你的少,但是也不会闪啊

另外你可以加一个进度条么,让程序初始化的时候显示几个进度条,不加载完成不要轻易去懂屏幕
只有最后完全加载好了,再改屏幕
[/Quote]
谢谢 建议,其实这东西最大的问题不是瞬间的黑屏,而是 在别的线程有messagebox或者窗口show在它上层的时候,它的部分控件会消失。
cnzdgs 2008-11-27
  • 打赏
  • 举报
回复
调试程序,看看执行到哪里的时候黑屏。
casale 2008-11-27
  • 打赏
  • 举报
回复
这个函数应该没有问题,楼主是不是在初始化窗口时做了太多事了
wudeshou82666 2008-11-27
  • 打赏
  • 举报
回复
up
Tinary3v0 2008-11-27
  • 打赏
  • 举报
回复
把贴图的部分放到内存里面去做,最后再贴回屏幕。
很多程序加载的东西不一定就比你的少,但是也不会闪啊

另外你可以加一个进度条么,让程序初始化的时候显示几个进度条,不加载完成不要轻易去懂屏幕
只有最后完全加载好了,再改屏幕
sungoco2 2008-11-27
  • 打赏
  • 举报
回复
是啊 ,无数个刷新和贴图,人生啊人生

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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