当前位置: 首页 > news >正文

MFC 透明窗体

如何制作透明窗体 ?????

  使用SetLayeredWindowAttributes可以方便的制作透明窗体,此函数在w2k以上才支持,而且如果希望直接使用的话,可能需要下载最新的SDK。不过此函数在w2k的user32.dll里有实现,所以如果你不希望下载巨大的sdk的话,可以直接使用GetProcAddress获取该函数的指针。

SetLayeredWindowAttributes的函数原型如下:

BOOL SetLayeredWindowAttributes

(

HWND hwnd, // handle to the layered window

COLORREF crKey, // specifies the color key

BYTE bAlpha, // value for the blend function

DWORD dwFlags // action

);

Windows NT/2000/XP: Included in Windows 2000 and later. Windows 95/98/Me: Unsupported.(注意了,在win9x里没法使用的) Header: Declared in Winuser.h; include Windows.h. Library: Use User32.lib.

一些常量:

WS_EX_LAYERED = 0x80000; LWA_ALPHA = 0x2; LWA_COLORKEY=0x1;

  其中dwFlags有LWA_ALPHA和LWA_COLORKEY

  LWA_ALPHA被设置的话,通过bAlpha决定透明度.

  LWA_COLORKEY被设置的话,则指定被透明掉的颜色为crKey,其他颜色则正常显示.

  要使使窗体拥有透明效果,首先要有WS_EX_LAYERED扩展属性(旧的sdk没有定义这个属性,所以可以直接指定为0x80000).

  例子代码:

  在OnInitDialog()加入:

//加入WS_EX_LAYERED扩展属性

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,128,2);  

FreeLibrary(hInst); }

  稍加修改还可以作出淡出淡入的效果. 注意第三个参数(128)不要取得太小了,为0的话就完全透明,看不到了。

http://www.lryc.cn/news/100372.html

相关文章:

  • C++笔记之vector的resize()和clear()用法
  • Vue2基础九、路由
  • 移动零——力扣283
  • Transformer+MIA Future Work
  • 深度学习入门(二):神经网络整体架构
  • rust 配置
  • 文心一言 VS 讯飞星火 VS chatgpt (67)-- 算法导论6.5 6题
  • 6、Kubernetes核心技术 - Pod
  • VlanIf虚拟接口 通信技术(二十三课)
  • 图神经网络(GNN)入门学习笔记(直观且简单)
  • 【Java开发】 Mybatis-Flex 01:快速入门
  • 企业级业务架构学习笔记<二>
  • Minio在windows环境配置https访问
  • 安装JDK环境(Windows+Linux双教程)
  • SVG图标,SVG symbols,SVG use标签
  • 常用css 笔记
  • git的ssh方式对接码云
  • Golang之路---02 基础语法——变量
  • Webpack5 DefinePlugin的作用
  • Verilog语法学习——LV7_求两个数的差值
  • C#匿名函数,lambda表达式笔记
  • 【图论】LCA(倍增)
  • QT 使用串口
  • GitHub上怎么寻找项目?
  • 如何快速用Go获取短信验证码
  • 详解Mybatis查询之resultType返回值类型问题【4种情况】
  • Python-Python基础综合案例:数据可视化 - 折线图可视化
  • CSS盒子模型(HTML元素布局)
  • PostgreSQL-Centos7源码安装
  • QTday2信号和槽