子窗口,透明背景&&文字不透明,该如何处理
子窗口,透明背景&&文字不透明
简单点说就是和各种音乐播放器中的歌词跑马灯差不多的效果,各位大神出手指点下,感觉这个应该是常用技巧,泥马可惜我不会,,,
具体点要求是这样:
1.这个窗口是继承CWnd (后面都叫他CNoticeWnd)
2.这个窗口是一个IE空间的子窗口
3.不修改父窗口CIEWnd的代码
4.这个子窗口需要有一个淡色的半透明底色,然后再底色上绘制不透明的文字。
我目前是这么做的:
直接在CNoticeWnd::OnPaint中添加这样的代码
Gdiplus::Graphics graph(dc.GetSafeHdc()); // 重DC创建
//本来是想做清屏操作,但是发现这样清屏没有透明度
//graph.Clear(Gdiplus::Color(88,0,0,255));
// 绘制半透明底色
// 但是这样绘制有个问题,第一次绘制的时候是半透明的,第二次绘制的时候是叠加绘制
// 也就是说随着绘制次数增加,透明度慢慢没了,,,
graph.FillRectangle(&Gdiplus::SolidBrush(Gdiplus::Color(88,0,0,255)),
Gdiplus::Rect(0,0,33,44));
问题来了:
1.为什么 graph.Clear(Gdiplus::Color(88,0,0,255)); 这样清屏不透明
2.后面的代码我理解是每次绘制的时候都进行alpha混合,有没有办法不混合,而是每次像素覆盖,这样透明度就不会覆盖。或者说alpha值不变?
------解决方案--------------------
半透明窗口不应该通过layerwindow来处理么
不是在OnPaint里弄的
------解决方案--------------------
Clear 这个函数使用之后只是在背景绘制一片黑色的/。。。并不是所谓的全部透明
简单点说就是和各种音乐播放器中的歌词跑马灯差不多的效果,各位大神出手指点下,感觉这个应该是常用技巧,泥马可惜我不会,,,
具体点要求是这样:
1.这个窗口是继承CWnd (后面都叫他CNoticeWnd)
2.这个窗口是一个IE空间的子窗口
3.不修改父窗口CIEWnd的代码
4.这个子窗口需要有一个淡色的半透明底色,然后再底色上绘制不透明的文字。
我目前是这么做的:
直接在CNoticeWnd::OnPaint中添加这样的代码
Gdiplus::Graphics graph(dc.GetSafeHdc()); // 重DC创建
//本来是想做清屏操作,但是发现这样清屏没有透明度
//graph.Clear(Gdiplus::Color(88,0,0,255));
// 绘制半透明底色
// 但是这样绘制有个问题,第一次绘制的时候是半透明的,第二次绘制的时候是叠加绘制
// 也就是说随着绘制次数增加,透明度慢慢没了,,,
graph.FillRectangle(&Gdiplus::SolidBrush(Gdiplus::Color(88,0,0,255)),
Gdiplus::Rect(0,0,33,44));
问题来了:
1.为什么 graph.Clear(Gdiplus::Color(88,0,0,255)); 这样清屏不透明
2.后面的代码我理解是每次绘制的时候都进行alpha混合,有没有办法不混合,而是每次像素覆盖,这样透明度就不会覆盖。或者说alpha值不变?
------解决方案--------------------
半透明窗口不应该通过layerwindow来处理么
不是在OnPaint里弄的
------解决方案--------------------
Clear 这个函数使用之后只是在背景绘制一片黑色的/。。。并不是所谓的全部透明