MFC的透明有关问题
MFC的透明问题
我在MFC的初始化函数中加入SetLayeredWindowAttributes(RGB(0,0,0),0,LWA_ALPHA);但是对话框不透明,是咱回事呢?
------解决方案--------------------
1、创建一个基于对话框的MFC EXE
2、在对话框的 OnInitDialog 函数 中,设置对话框扩展属性 为:WS_EX_LAYERED
const WS_EX_LAYERED = 0x80000;
::SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(GetSafeHwnd(),GWL_EXSTYLE)
------解决方案--------------------
WS_EX_LAYERED);
3、在对话框的 OnInitDialog 函数 中,设置对话框透明
HINSTANCE hInst;
const LWA_COLORKEY = 0x00001;
const LWA_ALPHA = 0x00002;
typedef BOOL (WINAPI *FSetLayeredWindowAttributes)(HWND,COLORREF,BYTE,DWORD);
FSetLayeredWindowAttributes SetLayeredWindowAttributes;
hInst = LoadLibrary("User32.dll");
SetLayeredWindowAttributes = (FSetLayeredWindowAttributes)
GetProcAddress(hInst,"SetLayeredWindowAttributes");
SetLayeredWindowAttributes(GetSafeHwnd(),RGB(0,0,0),150,LWA_ALPHA);
FreeLibrary(hInst);
注:此方法仅适用 Windows2000以上平台
补充部分:
还有另外一种方法可以实现对话框的透明,而且也简单一些,但是我在除自己电脑外,还在同学电脑上也试了下,效果一点都不好,做法是这样的,在VC中打开对话框资源,在对话框编辑器上右击选择属性(PROPERTIES),然后选择扩展属性(EXTENTED STYLE),勾选上TRANSPARENT。这个效果在我电脑上不明显,但你可以试试看。
------解决方案--------------------
OnInitDialog:
ModifyStyleEx(0,WS-EX-LAYERED);
SetLayeredWindowAttributes(RGB(0,0,0),200,LWA_ALPHA);
我在MFC的初始化函数中加入SetLayeredWindowAttributes(RGB(0,0,0),0,LWA_ALPHA);但是对话框不透明,是咱回事呢?
------解决方案--------------------
1、创建一个基于对话框的MFC EXE
2、在对话框的 OnInitDialog 函数 中,设置对话框扩展属性 为:WS_EX_LAYERED
const WS_EX_LAYERED = 0x80000;
::SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(GetSafeHwnd(),GWL_EXSTYLE)
------解决方案--------------------
WS_EX_LAYERED);
3、在对话框的 OnInitDialog 函数 中,设置对话框透明
HINSTANCE hInst;
const LWA_COLORKEY = 0x00001;
const LWA_ALPHA = 0x00002;
typedef BOOL (WINAPI *FSetLayeredWindowAttributes)(HWND,COLORREF,BYTE,DWORD);
FSetLayeredWindowAttributes SetLayeredWindowAttributes;
hInst = LoadLibrary("User32.dll");
SetLayeredWindowAttributes = (FSetLayeredWindowAttributes)
GetProcAddress(hInst,"SetLayeredWindowAttributes");
SetLayeredWindowAttributes(GetSafeHwnd(),RGB(0,0,0),150,LWA_ALPHA);
FreeLibrary(hInst);
注:此方法仅适用 Windows2000以上平台
补充部分:
还有另外一种方法可以实现对话框的透明,而且也简单一些,但是我在除自己电脑外,还在同学电脑上也试了下,效果一点都不好,做法是这样的,在VC中打开对话框资源,在对话框编辑器上右击选择属性(PROPERTIES),然后选择扩展属性(EXTENTED STYLE),勾选上TRANSPARENT。这个效果在我电脑上不明显,但你可以试试看。
------解决方案--------------------
OnInitDialog:
ModifyStyleEx(0,WS-EX-LAYERED);
SetLayeredWindowAttributes(RGB(0,0,0),200,LWA_ALPHA);