VC下实现窗体透明效果(clarity for CDialog)
VC下实现窗体透明效果,我只测试了CStatic是不可以实现这个效果的,应该是只有CWnd子类才可以实现这个效果,如果想使用空间透明化,只能把他放窗体上了....
20%透明效果如下图:
具体代码实现:
- //参数说明:透明度(范围是0-255)
- void CSizeDlg::SetWindowAttributes(int Attributes)
- {
- //////////////////////////////////////////////////////////////////////////
- //透明实现
- 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;
- //取得SetLayeredWindowAttributes函数指针
- fun=(MYFUNC)GetProcAddress(hInst,"SetLayeredWindowAttributes");
- if(fun)fun(this->GetSafeHwnd(),0,Attributes,2);
- FreeLibrary(hInst);
- }
- //////////////////////////////////////////////////////////////////////////
- }
这个函数在Vista下,使用也可实现透明效果
Re: BSoD
你说是固定函数么?可以查阅一下,我觉得这个是为了更好的移植性来写的
Comment by
wupei
(2009/10/08 14:28)
if(ptransparent_fun)
ptransparent_fun(this->GetSafeHwnd(), RGB(0, 0, 0), Attributes, 0X2 | 0X1);
好像可以实现的STATIC
不知道你说的是不是这个意思
Comment by
BSoD
(2009/07/14 18:18)





