首页 > 其他分享 >[AHK2] 为toolwindow窗口添加阴影效果

[AHK2] 为toolwindow窗口添加阴影效果

时间:2023-12-29 17:01:06浏览次数:26  
标签:bf AHK2 hwnd toolwindow int 添加 uint DllCall ptr

如下示例

  g := Gui('-Caption +Border') ; 或包含 +ToolWindow
  g.SetFont('s13', 'consolas')
  g.AddText('c4c071d', data)
  g.BackColor := 'f6eeda'
  g.Show('x100 y50')
  WinSetTransColor('white', g)
  FrameShadow(g.Hwnd)
FrameShadow(hwnd) {
  enabled := 0
  DllCall("dwmapi\DwmIsCompositionEnabled", "int*", &enabled)
  if !enabled {
    DllCall("SetClassLong", "uint", hwnd, "int", -26, "int", 0x20000)
  }
  else {
    bf := Buffer(4)
    NumPut('uint', -1, bf) ; 要应用此阴影效果,首先要将white设置为透明: WinSetTransColor('white', g)
    DllCall("dwmapi\DwmSetWindowAttribute", "ptr", hwnd, "uint", 2, "int*", 2, "uint", 4)
    DllCall("dwmapi\DwmExtendFrameIntoClientArea", "ptr", hwnd, "ptr", bf)
  }
}

但这不使用于所有情况,如果控件本身有白色则不适合使用。
而是使用下面的替代方案:

FrameShadow(hwnd) {
  enabled := 0
  DllCall("dwmapi\DwmIsCompositionEnabled", "int*", &enabled)
  if !enabled {
    DllCall("SetClassLong", "uint", hwnd, "int", -26, "int", 0x20000)
  }
  else {
    bf := Buffer(16)
    NumPut('uint', 0, bf)
    NumPut('uint', 0, bf, 4)
    NumPut('uint', 0, bf, 8)
    NumPut('uint', 1, bf, 12)
    DllCall("dwmapi\DwmSetWindowAttribute", "ptr", hwnd, "uint", 2, "int*", 2, "uint", 16)
    DllCall("dwmapi\DwmExtendFrameIntoClientArea", "ptr", hwnd, "ptr", bf)
  }
}

这样做的缺陷是会在底部留下空白(非0的边)。

标签:bf,AHK2,hwnd,toolwindow,int,添加,uint,DllCall,ptr
From: https://www.cnblogs.com/refiz/p/17935259.html

相关文章

  • 在ribbon的主窗口添加dialog
    1在。h文件中先把Cview换成CBGPFormView.2在。cpp文件中添加:CBCGPFormView(CWindowsDemo_MFCView::IDD),同时把cview换成cbgpformview3把第一张图中ID所对应的属性中的style换成child......
  • 动态添加的Promise按顺序执行
    原文链接:https://www.cnblogs.com/yalong/p/17935043.html动态添加的Promise异步事件按顺序执行需求描述用户点击一次页面上的一个按钮,就播放一个动画,如果点击n次就触发n次动画;在播放动画的同时,如果再点击按钮,那么会把n的次数累加,动画播放也增加对应的次数;同时支持在动画队......
  • 百度地图添加坐标点
    html<!DOCTYPEhtml><htmlxmlns="http://www.w3.org/1999/xhtml"><headrunat="server"><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>查看签到信息-地图&l......
  • KubeKey添加新节点
    KubeSphere使用一段时间之后,由于工作负载不断增加,可能需要水平扩展集群。自KubeSpherev3.0.0起,可以使用全新的安装程序 KubeKey 将新节点添加到集群。从根本上说,该操作是基于Kubelet的注册机制。换言之,新节点将自动加入现有的Kubernetes集群。1、工作准备需要一个单......
  • 添加一个SQL Server身份验证方式
    关键几步如下,特别是最后一步,记得勾选SQLServer和Windows.    参考网址:如何在SQLSERVER的windows身份验证添加一个SQLServer身份验证方式_sqlserverwindows身份验证添加-CSDN博客 ......
  • 给数组循环遍历添加属性,数组数据打印出来实际已经添加了,但是页面数据并没有展示出来,该
    问题复述,即:在vue项目中中,会遇到修改完数据,但是视图却没有更新的情况问题原因:因为用某些方法修改完数据,vue框架是没办法监听到,无法做到数据响应式,导致数据实际修改了,但页面没展示出来     参考:https://blog.csdn.net/weixin_48998573/article/details/130620390......
  • Linux 添加静态路由
    Linux添加静态路由在日常使用中,服务器有两个IP地址,两块网卡的配置,访问不同网段,这种情况很常见。但我们需要创建额外的路由条目,以确定通过正确的网关转发数据包,使interface能够正常通信。以下在CentOS7测试通过一、使用route命令加入临时路由,重启后将失效route命令参数:add......
  • flutter 添加原生IOS 播放器
    定义播放器FlutterAVPlayer.swiftimportFoundationimportAVKitimportMediaPlayerimportFlutterclassFlutterAVPlayer:NSObject,FlutterPlatformView{privatevar_flutterAVPlayerViewController:AVPlayerViewController;init(frame:CGRect,......
  • spring MVC 后端 接收 前端 批量添加的数据(简单示例)
    <%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head>  <title>Title</title></head><body><scriptsrc="${pageScope.request.ContextPath}/js/jquery-3.3.1.min.js&qu......
  • C# 9.0 添加和增强的功能【基础篇】
    C#9.0添加和增强的功能【基础篇】 阅读目录一、记录(record)with表达式二、仅限Init的资源库三、顶级语句四、模式匹配增强功能五、模块初始值设定(ModuleInitializer)六、可以为null的引用类型规范七、目标类型的new表达式八、扩展分部方法九、静态匿名......