本次讲解所基于的开发环境 VisualStudio2010 MFC窗体开发
对话框透明度需要用到的函数:
//HINSTANCE hInst = LoadLibrary("User32.DLL"); VC6.0需要手动添加
//VS2010不需要考虑这个问题,直接调用
BOOL WINAPI SetLayeredWindowAttributes(HWND hWnd,COLORREF crKey,BYTE bAlpha, DWORD flag);
//参数解释:
//hWnd: 所要设置的窗口句柄
//crKey:掩码颜色,定义如下:
//#define RGB(r,g,b)((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))
//bAlpha:窗口的透明度,取值范围 (0~255)代表透明程度
//flag:透明方式,可取两个值:
//#define LWA_COLORKEY 0x00000001
//flag取该值时:窗体中的所有颜色为crKey的地方将变为透明,bAlpha参数有效
//#define LWA_ALPHA 0x00000002
//flag取该值时:crKey参数无效,bAlpha参数有效
上述是在开发透明窗体时需要用到的函数,使用该函数的前提条件是:
想要透明窗体,首先要有WS_EX_LAYERED扩展属性,方法:
1.在CreateWindowEx时指定
2.利用SetWindowLong动态设置
创建透明窗口
这是百度百科的解释:
GetWindowLong是一个Windows API。
该函数可获取指定窗口的有关信息,也可用于获取窗口内存中指定偏移的32位度整型值。
SetWindowLong是一个WindowsAPI函数。
该函数用来改变指定窗口的属性.函数也将指定的一个32位值设置在窗口的额外存储空间的指定偏移位置。
//
Long GetWindowLong(HWND hWnd,int nlndex);
LONG SetWindowLong(
HWND hWnd, // handle to window
int nlndex, // offset of value to set
LONG dwNewLong // new value
);
实现功能
其实实现功能就以下两句话,上述解释只是为了更好的理解。
//在我的例子中,我把该段函数放在了Diglog的OnInitDialog()函数中
//#define GWL_EXSTYLE (-20)
//#define WS_EX_LAYERED 0x00080000
::SetWindowLong(m_hWnd, GWL_EXSTYLE, GetWindowLong(m_hWnd, GWL_EXSTYLE)^0x80000);
::SetLayeredWindowAttributes(m_hWnd, RGB(0,0,0), 255, LWA_ALPHA );
也是方便以后时间久了有所遗忘,所以写的稍微详细一些,希望对后面的人有所帮助。