如何对话框上的某种颜色过滤以达到透明效果?

windk123 2011-05-04 04:56:18
我做了个很小的对话框上面只放了张GIF图片,GIF图片的背景是白色的,想要过滤掉白色以达到透明效果,就是只显示GIF动画部分。
::SetLayeredWindowAttributes(GetSafeHwnd(), RGB(255, 255, 255), 255, LWA_COLORKEY);
我这样做没有效果,使用参数LWA_ALPHA可以半透明,但使用LWA_COLORKEY却不可以过滤这个白色,希望大家能给解答下。
...全文
122 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
windk123 2011-05-06
  • 打赏
  • 举报
回复
我是在OnInitDialog中加入这两行:
SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE) | WS_EX_LAYERED);
SetLayeredWindowsAttributes(GetSafeHwnd(), RGB)(255, 255, 255), 255, LWA_COLORKAY);
但在一个工程中不起作用,而在另一个工程中可以滤掉白色。

不太清楚这一点。就这样结贴吧,大家分分
天鹅梦 2011-05-05
  • 打赏
  • 举报
回复
void CDlgXXX::MakeTransparent(BYTE alpha)
{
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
HINSTANCE hInst = LoadLibrary("User32.DLL");
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//got SetLayeredWindowAttributes function pointer
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
if(fun)
fun(this->GetSafeHwnd(),0,alpha,2);
FreeLibrary(hInst);
}

}

windk123 2011-05-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fighttodeath 的回复:]

AlphaBlend试下。。
[/Quote]

它好像能让图片半透明,如何让对话框背景透明呢?
windk123 2011-05-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 shenyulv 的回复:]

如果不从vc上考虑,只要实现效果的话,是否可以先在photoshop处理一下....
[/Quote]

兄台说的方法也需要把对话框弄透明才行。
windk123 2011-05-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jamesclarke 的回复:]

这个参数好像对GIF没有效果的,可能是因为它是动态多帧的图片吧
[/Quote]

如果不是GIF会有用?GIF应该怎么做呢?另外如何仅让对话框背景透明?让对话框透明了之后再处理GIF透明应该也行吧。
青稞 2011-05-04
  • 打赏
  • 举报
回复
AlphaBlend试下。。
小驴 2011-05-04
  • 打赏
  • 举报
回复
如果不从vc上考虑,只要实现效果的话,是否可以先在photoshop处理一下....
jamesclarke 2011-05-04
  • 打赏
  • 举报
回复
这个参数好像对GIF没有效果的,可能是因为它是动态多帧的图片吧

19,468

社区成员

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

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