老问题,求解CImage透明PNG做背景,拖动问题

cscript 2012-05-23 07:20:03
大家好,最近做一个像msn那种消息提示框,类似这样,图片周围有点阴影,

我用以下方式处理

//OnInitDialog里面
m_imgBG.Load("msg_bg.png");
for(int i = 0; i < m_imgBG.GetWidth(); i++)
{
for(int j = 0; j < m_imgBG.GetHeight(); j++)
{
unsigned char* pucColor = reinterpret_cast<unsigned char *>(m_imgBG.GetPixelAddress(i , j));
pucColor[0] = pucColor[0] * pucColor[3] / 255;
pucColor[1] = pucColor[1] * pucColor[3] / 255;
pucColor[2] = pucColor[2] * pucColor[3] / 255;
}
}


//OnEraseBkgnd里面
m_imgBG.AlphaBlend(pDC->GetSafeHdc(), 0, 0);


这样是可以显示成透明效果,但是当窗口移动的时候,那些透明的部分就会保持窗口透明背后的残影。

于是我又google
设置SetLayeredWindowAttributes属性过滤掉背景颜色
浅背景下显示是完美的
但是在深背景下 图片的阴影地方明显没有过渡很难看

如果用双缓冲,那些透明的地方又都是黑色的?


我又想干脆再移动之前干脆截取背景图片再重绘,(google了下没找到实现方法)

在此,请教下各位还有什么方法大家有什么好的办法处理吗,谢了
...全文
434 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cscript 2012-05-28
  • 打赏
  • 举报
回复
8楼的值得尝试,给分,结贴
WJN92 2012-05-27
  • 打赏
  • 举报
回复
以前做过
一般是做两个窗体,一个半透明的,一个不透明。
gfm688 2012-05-27
  • 打赏
  • 举报
回复
肯定要用分层窗口,用UpdateLayeredWindow吧
http://www.360doc.com/content/10/0913/09/2631212_53246332.shtml
cscript 2012-05-24
  • 打赏
  • 举报
回复
自己顶起~~~
cscript 2012-05-24
  • 打赏
  • 举报
回复
谢谢楼上2位的关注,这个问题困扰我2天了,(—.—||||
zth555888 2012-05-24
  • 打赏
  • 举报
回复
帮顶。
我也有同样的问题。。
红色代码 2012-05-24
  • 打赏
  • 举报
回复
很早以前就遇到同样的问题,一直拖到现在也没解决,顶下
cscript 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

http://download.csdn.net/detail/lybjjj/2417865
[/Quote]
谢谢你的回答
不过我,要解决的是界面,而不是怎么实现仿msn功能
  • 打赏
  • 举报
回复
http://download.csdn.net/detail/lybjjj/2417865

15,980

社区成员

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

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