求实现单文档客户区透明的代码或实现方法

来源:百度知道 编辑:UC知道 时间:2024/09/23 10:10:12
做一个桌面精灵,怎样才能实现背景透明呢?我的思路是在单文档的客户区直接贴图,在透明上,我用的是SetLayeredWindowAttributes函数,可是在显示动画的时候总是卡得很厉害或根本出不来图像,这是为什么呢?该怎样解决啊?
如果是以当前桌面为背景绘图,又该怎样实现啊?或者有没有其它可以实现透明的方法?
请各位高手指点一二(最好能把代码贴上),感激不尽啊!!
我想要的是只有客户区背景透明,不包括上面的贴图!
谢谢两位高手的回答,可是这个办法没有达到预期的效果,整个窗体(包括贴图动画)都透明了,而且动画显示时也很卡!
难道就没有实现像桌面精灵那样背景透明的方法吗?

我不要用SetLayeredWindowAttributes函数实现的方法!

以当前桌面为背景绘图
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^1000000);
HINSTANCE hInst = LoadLibrary("User32.DLL");
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//取得SetLayeredWindowAttributes函数指针
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
if(fun)
fun(this->GetSafeHwnd(),0,128,2);
FreeLibrary(hInst);
}
return 0;
}

你这样太麻烦了
不用声明
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//取得SetLayeredWindowAttributes函数指针
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
这些
直接使用
::SetLayeredWindowAttributes(this->GetSafeHwnd(),0,128,2);
就可以了

需要用到窗体插件
或者自己画不规则窗口,把部分区域设透明,部