那么有谁知道如何实现让窗体的不同部分透明度不同。
比如这个区域透明些,另一个区域更透明些。
见过好几个软件有这种功能,系统应该有这样的api支持吧。
26 个解决方案
#1
帮你顶
#2
自己顶,高手们,来吧
#3
函数估计是一样的
只是把一大块分成了好几小块
只是把一大块分成了好几小块
#4
应该是没有现成的API,自己处理吧。
#5
alpha透明太伤了
自己做的话效率会比较低
activeskin就处理的很好
自己做的话效率会比较低
activeskin就处理的很好
#6
把窗口分成几部分,分别设置透明度
#7
是否用多个窗口拼接在一起,对每个窗口分别用SetLayeredWindowAttributes设置透明度
#8
自己做个绘制透明度的函数,参数就是窗口坐标。根据坐标(X,或者Y)来计算一个透明度设置上去就行了。
估计效率也不会太低,因为是用底层API嘛
估计效率也不会太低,因为是用底层API嘛
#9
图片的话可以用PHOTOSHOP处理成渐变透明,然后贴到对话框
#10
可以使用 WS_EX_LAYER 窗口属性
#11
SetLayeredWindowAttributes是对整个窗口的
用图片自己处理再贴图的话,效率肯定低。而且,抓取窗口后面
原来显示的图像也不太容易。
继续出招吧。
用图片自己处理再贴图的话,效率肯定低。而且,抓取窗口后面
原来显示的图像也不太容易。
继续出招吧。
#12
你可以使用spy++试试看,不同透明是否是一个窗体!
BYTE eff=(BYTE)m_slide.GetPos(); //µÃµ½»¬¶¯ÌõµÄλÖÃ
HINSTANCE hInst = LoadLibrary("User32.DLL"); //¼ÓÔØDLL
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//È¡µÃSetLayeredWindowAttributesº¯ÊýÖ¸Õë
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
//µ÷ÓÃSetLayeredWindowAttributes
if(fun)fun(this->GetSafeHwnd(),0,eff,2);
FreeLibrary(hInst);
};
CString str;
str.Format("%d",100*eff/255);
GetDlgItem(IDC_EDIT1)->SetWindowText(str);//ÏÔʾ͸Ã÷Öµ
BYTE eff=(BYTE)m_slide.GetPos(); //µÃµ½»¬¶¯ÌõµÄλÖÃ
HINSTANCE hInst = LoadLibrary("User32.DLL"); //¼ÓÔØDLL
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//È¡µÃSetLayeredWindowAttributesº¯ÊýÖ¸Õë
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
//µ÷ÓÃSetLayeredWindowAttributes
if(fun)fun(this->GetSafeHwnd(),0,eff,2);
FreeLibrary(hInst);
};
CString str;
str.Format("%d",100*eff/255);
GetDlgItem(IDC_EDIT1)->SetWindowText(str);//ÏÔʾ͸Ã÷Öµ
#13
试了,完全是一个窗体。
#14
自己提前
#15
自己提前
#16
曾经有一份代码,不过不知道还能不能找到
使用的是 WS_EX_LAYERED 属性
而不是使用 SetLayeredWindowAttributes
两者之间是有一些区别的
使用的是 WS_EX_LAYERED 属性
而不是使用 SetLayeredWindowAttributes
两者之间是有一些区别的
#17
..
#18
to 空气:
哦?那通过WS_EX_LAYERED 可以实现么?
哦?那通过WS_EX_LAYERED 可以实现么?
#19
SetLayeredWindowAttributes只对有WS_EX_LAYERED风格的窗口有效,呵呵,如果CSDN支持贴图就好了
#20
对呀,所以WS_EX_LAYERED风格 只是 SetLayeredWindowAttributes的必要条件,深夜不眠者,你有高招?
#21
其实对于一个屏幕的一个像素是可以取到它不同程度的透明值的,只要将得到窗口的不同区域的像素然后用运算后的值取代,但这种算法比较费时
#22
晕,我在我的问题里都提过这种解法,
不现实哦
不现实哦
#23
是吗??也
我顶
我顶
#24
应该把窗口分成几部分,然后将各个部分分别自己设置透明度!
#25
我想,不管怎么实现要首先知道操作系统是什么
#26
如果做区域合并的话,应该可以做到,先用几个窗口,对这些窗口显示成不同的透明度,接着用区域rgn合并,合成后的dc放在目标窗口上
#1
帮你顶
#2
自己顶,高手们,来吧
#3
函数估计是一样的
只是把一大块分成了好几小块
只是把一大块分成了好几小块
#4
应该是没有现成的API,自己处理吧。
#5
alpha透明太伤了
自己做的话效率会比较低
activeskin就处理的很好
自己做的话效率会比较低
activeskin就处理的很好
#6
把窗口分成几部分,分别设置透明度
#7
是否用多个窗口拼接在一起,对每个窗口分别用SetLayeredWindowAttributes设置透明度
#8
自己做个绘制透明度的函数,参数就是窗口坐标。根据坐标(X,或者Y)来计算一个透明度设置上去就行了。
估计效率也不会太低,因为是用底层API嘛
估计效率也不会太低,因为是用底层API嘛
#9
图片的话可以用PHOTOSHOP处理成渐变透明,然后贴到对话框
#10
可以使用 WS_EX_LAYER 窗口属性
#11
SetLayeredWindowAttributes是对整个窗口的
用图片自己处理再贴图的话,效率肯定低。而且,抓取窗口后面
原来显示的图像也不太容易。
继续出招吧。
用图片自己处理再贴图的话,效率肯定低。而且,抓取窗口后面
原来显示的图像也不太容易。
继续出招吧。
#12
你可以使用spy++试试看,不同透明是否是一个窗体!
BYTE eff=(BYTE)m_slide.GetPos(); //µÃµ½»¬¶¯ÌõµÄλÖÃ
HINSTANCE hInst = LoadLibrary("User32.DLL"); //¼ÓÔØDLL
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//È¡µÃSetLayeredWindowAttributesº¯ÊýÖ¸Õë
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
//µ÷ÓÃSetLayeredWindowAttributes
if(fun)fun(this->GetSafeHwnd(),0,eff,2);
FreeLibrary(hInst);
};
CString str;
str.Format("%d",100*eff/255);
GetDlgItem(IDC_EDIT1)->SetWindowText(str);//ÏÔʾ͸Ã÷Öµ
BYTE eff=(BYTE)m_slide.GetPos(); //µÃµ½»¬¶¯ÌõµÄλÖÃ
HINSTANCE hInst = LoadLibrary("User32.DLL"); //¼ÓÔØDLL
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//È¡µÃSetLayeredWindowAttributesº¯ÊýÖ¸Õë
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
//µ÷ÓÃSetLayeredWindowAttributes
if(fun)fun(this->GetSafeHwnd(),0,eff,2);
FreeLibrary(hInst);
};
CString str;
str.Format("%d",100*eff/255);
GetDlgItem(IDC_EDIT1)->SetWindowText(str);//ÏÔʾ͸Ã÷Öµ
#13
试了,完全是一个窗体。
#14
自己提前
#15
自己提前
#16
曾经有一份代码,不过不知道还能不能找到
使用的是 WS_EX_LAYERED 属性
而不是使用 SetLayeredWindowAttributes
两者之间是有一些区别的
使用的是 WS_EX_LAYERED 属性
而不是使用 SetLayeredWindowAttributes
两者之间是有一些区别的
#17
..
#18
to 空气:
哦?那通过WS_EX_LAYERED 可以实现么?
哦?那通过WS_EX_LAYERED 可以实现么?
#19
SetLayeredWindowAttributes只对有WS_EX_LAYERED风格的窗口有效,呵呵,如果CSDN支持贴图就好了
#20
对呀,所以WS_EX_LAYERED风格 只是 SetLayeredWindowAttributes的必要条件,深夜不眠者,你有高招?
#21
其实对于一个屏幕的一个像素是可以取到它不同程度的透明值的,只要将得到窗口的不同区域的像素然后用运算后的值取代,但这种算法比较费时
#22
晕,我在我的问题里都提过这种解法,
不现实哦
不现实哦
#23
是吗??也
我顶
我顶
#24
应该把窗口分成几部分,然后将各个部分分别自己设置透明度!
#25
我想,不管怎么实现要首先知道操作系统是什么
#26
如果做区域合并的话,应该可以做到,先用几个窗口,对这些窗口显示成不同的透明度,接着用区域rgn合并,合成后的dc放在目标窗口上