VisualStudio2010 MFC SetLayeredWindowAttributes 设置窗口透明度

本次讲解所基于的开发环境 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
);

关于SetWindowLong的详细参数定义

实现功能
其实实现功能就以下两句话,上述解释只是为了更好的理解。

//在我的例子中,我把该段函数放在了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 );

也是方便以后时间久了有所遗忘,所以写的稍微详细一些,希望对后面的人有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CDamogu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值