Windows窗口背景透明的几种方法

 

做一个项目,需要用到窗口透明,把我学习到的几种方法罗列一下:

 

1,响应WM_CTLCOLOR消息,在消息函数内,如果需要获取窗口的Brush句柄,返回一个空句柄。

    这个方法能够实现窗口的背景透明,但是不能设置alpha值,也就是说,没办法做到半透的效果。

2,调用SetWindowRgn函数,可以得到一个不规则形状窗口,把需要透明的窗口部分去掉。

   这个方法说起来不算是真正的窗口透明,但是可以用来创建一个非规则的窗口应用程序。

3,重载窗口的OnCreate函数,设置扩展属性:

int CWhiteBoardDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CDialog::OnCreate(lpCreateStruct) == -1)
  return -1;

 DWORD exStyle = ::GetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE);
 exStyle |= WS_EX_LAYERED;
 ::SetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE, exStyle);
 ::SetLayeredWindowAttributes(this->GetSafeHwnd(), RGB(0, 0, 0), 50, LWA_COLORKEY);

 // TODO:  在此添加您专用的创建代码

 return 0;
}

 

SetLayeredWindowAttributes函数的最后一个参数,可以指明为Alpha透明。这样可以设置半透的效果。

 

第三个方法的问题是,整个窗口包括背景和前景都会有alpha效果,有时候只需要背景透明,而前景色保持不变,需要结合第1,3种方法才行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值