首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

WPF 制作高性能的透明背景异形窗口(使用 WindowChrome 而不要使用 AllowsTransparency=True)

本文介绍如何使用 WindowChrome 而不设置 AllowsTransparency="True" 制作背景透明的异形窗口,这可以避免异形窗口导致的低渲染性能。...背景透明的异形窗口 如下是一个背景透明异形窗口的示例: 此窗口包含很大的圆角,还包含 DropShadowEffect 制作的阴影效果。对于非透明窗口来说,这是不可能实现的。...如何实现 要实现这种背景透明的异形窗口,需要为窗口设置以下三个属性: WindowStyle="None" ResizeMode="CanMinimize" 或 ResizeMode="NoResize...可见,对于渲染性能,使用 WindowChrome 制作的背景透明异形窗口性能完虐使用 AllowsTransparency 制作的背景透明异形窗口,实际上跟完全没有设置透明窗口的性能保持一致。...值得注意的是,由于在使用 WindowChrome 制作透明窗口的时候设置了 ResizeMode="None",所以你拖动窗口在屏幕顶部和左右两边的时候,Windows 不会再帮助你最大化窗口或者靠边停靠窗口

2.1K20

macOS 开发基础教程视频 - 理解bounds本质

父控件,我需要在你的坐标系统中的占据这个frame.origin位置,尺寸是frame.size的区域),这样以来,父控件在布局的时候,就会知道如何摆放它内部的所有控件了。...可是一旦遮盖起来,你发现自己都无法观看了,这时候你想到了一个聪明的办法:在遮盖上开启一个矩形的窗口,透过这个窗口,就可以看到遮盖下面的壁画(NSView)了,如你所料:这个矩形的窗口,就是bounds...通过bounds,我们就可以看到NSView内部所展示的内容。...这样bounds就成为了我们对NSView的观景窗~ 如果现在你已经理解了bounds,那么对于ScrollView的是如何实现滑动展示其内部视图内容,就不会觉得奇怪了。...下面我们通过一个示例来加深对bounds的理解和使用 创建一个Mac application 项目工程,从控件库中拖动一个customView到ViewController中,并搭建UI界面大致如下:

1.1K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Mac开发跬步积累(五): Dark Mode下适配你的UI界面

    NSAppearance决定着AppKit如何渲染每个UI控件的效果,尤其是与颜色或者图片相关的部分....: template 设置规则 需要忽略的部分使用透明背景 需要显示的部分使用黑色或者部分透明的黑色 设置图片的渲染模式为Template: 设置图片渲染模式...中的代码进行图片创建,从而实现适配效果; 0x03: 自定义View 适配(NSView) 当改变当前的appearance时,AppKit会自动调用NSView的下面几个方法(根据情况调用) updateLayer...适配,苹果官方建议采用根据使用明确场景语义枚举.例如在一个popOver的窗口中,推荐使用NSVisualEffectView.Material.popover,这样系统就根据appearance变化自动选择合适的效果了...时,AppKit会同时更新UI控件,这部分工作通常都是自动完成的.但有时也会调用开发者编写的代码,例如你使用了NSImage的draw handler 方式创建图片对象,又或者使用了KVO监听一个视图或者窗口的

    2.4K20

    自定义Window标题栏titleBar 原

    自定义标题栏主要有如下两种思路: 1.去掉系统的标题栏,使用自定义的View来做标题栏。 2.隐藏系统的标题栏,进行标题栏的透明处理。...= NSWindowTitleHidden; //设置可以通过拖拽window背景视图进行窗口的移动 [self.window setMovableByWindowBackground:YES]; /.../设置window的内容部分充满整个窗口 [self.window setStyleMask:[self.window styleMask] | NSWindowStyleMaskFullSizeContentView...]; //获取到windows的主视图 NSView * themeView = self.window.contentView.superview; //根据层级结构获取到标题栏视图 NSView...,这样是为了让系统的3个功能按钮显示在自定义标题栏的中间,但是当用户使用全屏功能进行全屏与非全屏切换时,系统会对标题栏的尺寸进行重新布局,将功能按钮放回原来的位置,为了避免这样的问题,可以监听用户全屏切换事件

    1.6K20

    STM32CubeMX | 41-使用LTDC驱动TFT-LCD屏幕(RGB屏)

    本篇详细的记录了如何使用STM32CubeMX配置 STM32F767IGT6 的 LTDC 外设驱动 TFT-LCD (RGB)屏幕。 1....还有一些屏幕称为RGB屏幕,内部没有驱动IC,操作这种屏幕时往往使用MCU内部集成的LCD控制器直接去控制LCD显示,显存空间当然也是在MCU内部,按照空间大小可以选择放在内部SRAM或者外部SDRAM...③ 设置显存空间: 本文中将帧缓存buffer创建在SDRAM中,SDRAM的起始地址为 0xC0000000,由于使用 RGB565 格式,每个像素点需要两个字节显存,所以整个显存空间为:10246002...虽然三层都有显示,但是图层2设置为不透明,所以只会显示图层2;图层2的窗口因为没有设置显存,为黑色,窗口之外的区域为图层2的背景色红色,效果如下: ?...至此,LTDC外设如何驱动RGB 屏幕讲解完毕,下节我们使用DMA2D来修改显存内容,实现打点画线字符等多样显示。

    15.2K84

    【专业技术】搜狗歌词窗口如何来实现

    要实现这种效果,有一点一般是需要的,就是窗口透明的效果,所以关键之一就是如何实现windows窗口的透明。...crKey:指定要实现透明的color key。 bAlpha:指定整个窗口的透明度。...dwFlags:透明标记,LWA_COLORKEY则指定crKey作为透明颜色,LWA_ALPHA则指定bAlpha作为整个窗口的透明色。...我们要实现像Sogou歌词窗口那样,显然是没有标题栏和边框,并且是最顶层窗口,所以我们创建窗口时要指定相应的属性。...本方法实现的类似Sogou歌词显示窗口的关键有两处: 一是需要实现透明窗口效果,用WS_EX_LAYERED属性和SetLayeredWindowAttributes函数实现,这样就只有窗口上的字出现。

    905100

    Jekyll-Admin-Mac 开发纪要-左侧菜单栏

    我们新建一个 SideMenuView继承 NSView。 现在 NSView创建的时候不允许使用 XIB,我们自己新建一个 Xib。 名字叫做 SideMenuView.xib。...@IBDesignable和@IBInspectable 为了可以自定义背景颜色,我们创建一个继承 NSView的子类 BaseView。...在Xcode6中使用IBDesignable创建自定义控件(翻译) 关于如何 NSView自定义背景颜色参考下面的连接 我们设置 NSView为继承与 BaseView 背景颜色试图。...我们发现我们刚才创建的 NSTableView显示的背景颜色是白色的,我们可以关闭 NSScrollView的绘制背景颜色和设置 NSTableView的背景颜色为透明即可。 ?...我们按照上文所描述的方法创建一个 Xib文件。 我们设置 Xib里面的 NSView的宽度为 205,高度为 49。其实我们这个宽度和高度会随着改变的。

    2.4K10

    快手( AAuto Quicker ) v6.5.06更新记录

    例如 plus 控件也有一些限制,使用剪切背景等方法修正透明带来的闪烁,但是你不能把plus控件浮动在一个按钮前面且显示透明动画。...一个窗体的子窗口总是显示在父窗口的内部,例如你在网页上看到flash是透明的,但是flash一半显示在网页里面,一半显示在浏览器外面在桌面上透明,这个实现起来就很麻烦了。...f-in-box对新版控件支持不稳定(之前发的范例遇到崩溃规象,需要打包Flash8.ocx所以体积更大) 3、win.flashBox 可以让子窗口播放透明flash动画(使用custom控件即可)...创建透明窗口方法一: 直接使用 win.flashBox 创建窗口。    ...: 可以在已创建的winform窗口对象上显示透明动画(支持custom控件创建的子窗口) import win.ui; /*DSG{{*/ var winform = win.form

    95730

    高级 SwiftUI 动画 — Part 1:Paths

    假设我们为一个视图的不透明度创建一个线性动画。我们打算从 0.3 到 0.8。该框架将多次重新生成视图,以小幅度的增量来改变不透明度。...SwiftUI 已经为不透明度制作了动画,而不需要我担心这一切。是的,这是真的,但只要 SwiftUI 知道如何将数值从原点插值到终点。对于不透明度,这是一个直接的过程,SwiftUI 知道该怎么做。...因此,为了使动画发生,我们需要两件事: 我们需要改变形状的代码,使其知道如何绘制边数为非整数的多边形。 让框架多次生成这个形状,并让可动画参数一点点变化。...get { return sides } set { sides = newValue } } ... } 用小数画边 最后,我们需要教 SwiftUI 如何绘制一个边数为非整数的多边形...{ self.sides = sides self.sidesAsDouble = Double(sides) } ... } 有了这些变化,我们在内部使用

    4.1K20

    WPF 动画性能测试应用 一千个半透明矩形做动画

    可以测试自己的电脑的性能,看看是否一千个带动画的半透明矩形就带不动 本文的实现过程非新手友好,但是如果只是想测试一下性能,那只需获取代码跑起来即可,没有什么难度。...本次的测试应用将尽可能减少这部分的干扰,使用比较基础的方式编写 在 MainWindow 的 Loaded 事件里编写实现逻辑,如此可以规避 Win32 窗口创建时的故事,也方便大家进行性能测量...创建纯色画刷本身不需要多少资源,请看 dotnet 读 WPF 源代码笔记 创建 SolidColorBrush 性能没有想象那么差 但是使用画刷是需要一些资源的 var...,对于绘制来说,半透明和非半透明的性能差距是非常大的。...下分别执行,以及调试下和非调试下执行的性能 本文的代码放在github 和 gitee 欢迎访问 可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码

    65440

    emWin学习

    一、WM窗口管理 窗口是矩形的、具有Z位置、可以隐藏和显示、具有有效或无效区域、可以透明或不透明、可具有或没有回调函数。...窗口的客户区就是其可用区域,如果窗口包含边框或标题栏,则客户区内部的矩形区域(对话框控件等要注意WM_GetClientWindow() 获取对话框的客户区句柄,然后WM_InvalidateWindow...桌面窗口由窗口管理器自动创建,并始终覆盖整个显示区域。桌面窗口始终是对底层的窗口,在没有定义其他窗口时,桌面窗口就是默认窗口,其他窗口都是其后代。句柄是WM_HBKWIN....如果在初始化之前调用WM_SetCreateFlags(WM_CF_MEMDEV)使用存储设备,防止按键带位图显示按下的时候闪烁,则在GUI_Init()内创建背景窗口。...WM_SetCreateFlags(WM_CF_MEMDEV); 使用存储设备,放在GUI_Init() 函数之前,桌面也使用存储设备,我的iconview窗口是在桌面上创建的,不使能存储点击图标的时候

    2.1K10

    【第3版emWin教程】第41章 emWin6.x窗口管理器基础知识(重要)

    客户区: 窗口的客户区就是其可用区域。如果窗口包含边框或标题栏,则客户区是内部的矩形区域。如果没有这种边框,则客户区的坐标与窗口自身的坐标相同。...创建窗口时,如果不指定创建标记,默认情况下设置为顶部。 41.4 窗口管理器的回调机制,无效化,渲染和键盘输入 窗口管理器可以在有回调函数的例程中使用,也可以在无回调函数的例程中使用。...处理WM_PAINT消息要分两种情况进行说明: 非透明窗口(默认)必须重绘其整个无效区域: 最简单的方式是重新绘制窗口的整个区域。窗口管理器的裁剪机制确保了仅重绘无效区域。...本章稍后描述了如何获得无效区域 (信息是消息的一部分)。 透明窗口不必重绘整个无效区域: 透明窗口不必重绘整个无效区域,它可让窗口部分区域不受影响,此不受影响的区域会变成透明。...另外,使用透明窗口比使用不透明窗口需要更多消耗CPU。如果需要考虑性能问题,尝试避免使用透明窗口。

    1.7K20

    Android 12的行为变更和版本兼容思路

    窗口的根视图是 GONE或 INVISIBLE。 完全透明的窗口。这 alpha窗口属性为0.0。 足够透明的系统警报窗口。...当组合的不透明度小于或等于系统对触摸的最大遮盖不透明度时,系统认为一组系统警报窗口是足够透明的。...非SDK接口限制 Android 12根据与Android开发人员的协作以及最新的内部测试,包括受限制的非SDK接口的更新列表。只要有可能,在限制非SDK接口之前,请确保可以使用公共替代方案。...考虑在您的应用程序在后台运行时使用 WorkManager安排和开始工作。 要了解有关您的应用如何受到影响以及如何基于这些更改来更新应用的更多信息,请阅读有关前台服务启动限制的指南。...非SDK接口限制 Android 12根据与Android开发人员的协作以及最新的内部测试,包括受限制的非SDK接口的更新列表。只要有可能,在限制非SDK接口之前,请确保可以使用公共替代方案。

    5.2K10

    CSS 如何设置背景透明,并使用 PHP 将十六进制的颜色值转换成 RGBA 格式

    我们在进行网页设计的时候,为了网页的整体美观,可能需要将网页中的某些部分设置为背景颜色透明,那么如何设置背景颜色透明呢?...使用 RGBA 设置背景透明 我们使用 CSS 设置颜色的时候,一般适用十六进制值的颜色,比如黄色就是:#ffff00。其实颜色的值还可以通过 RGBA 的方式来设置。...使用 PHP 将十六进制的颜色值转换成 RGBA 格式 但是我们在后台设置颜色的时候,一般设置成十六进制的颜色值,然后再加上一个透明度: 那么怎么转换成 RGBA 格式呢?...我写了一个函数,使用 PHP 直接将十六进制的颜色值转换成 RGBA 格式或 RGB 格式(没有传递透明度): function wpjam_hex2rgba($color, $opacity=null...')'; } } 这个函数非常简单,只有两个参数,第一个是十六进制的颜色值,第二个是透明度,然后透明度没有传递,则生成颜色的 RGB 值,传递了则生成 RGBA 的值。

    4K40

    Jekyll-Admin-Mac-模板处理

    如何设置 NSButton 标题的颜色 使用 Module 名称解决名字冲突问题 NSButton 设置 attributedTitle 之前的对齐方式失效 关于 NSMutableParagraphStyle...⚠️因为之前我们的 SideMenuItemView设置了背景颜色,所以我们在 SideMenuItemView.xib设置默认透明即可。 ?...设置此属性的值以true将视图转换为层次支持的视图,即视图使用CALayer对象来管理其渲染的内容。创建层支持的视图隐式地导致该视图下的整个视图层次结构成为层支持。...然后,可以以比显式显示视图内容更有效的方式来操纵缓存的内容。AppKit会自动创建底层图层对象(使用该方法)并处理视图内容的缓存。如果该方法返回,则不应直接与底层对象进行交互。...canDrawSubviewsIntoLayertruewantsLayertrue 除了创建层支持的视图,您还可以通过将图层直接分配给视图的layer属性来创建层托管视图。

    7.1K30

    小窗播放视频的原理和实现(上)

    本文对小窗视频播放进行了详细的研究,针对几种实现方案进行了深入的对比分析,进而给出实现小窗视频播放的最优解。其中通过对系统源码的分析,详细探究了如何完美地实现移动、缩放等效果,很有技术深度。...如果宿主窗口的绘制表面还未创建,或者需要重新创建,那么就会请求SurfaceFlinger服务为它创建一个新的Surface。...但是mWindowType为TYPE_APPLICATION_MEDIA或TYPE_APPLICATION_MEDIA_OVERLAY的SurfaceView会被宿主窗口挡住,如何解决这个问题,这就要了解...,透明度变化等方法无法使用。...Android N上SurfaceView新特性的说明上,官方也推荐在不执行旋转、透明度、缩放时使用SurfaceView。

    11.2K181

    macOS AppKit 的事件响应简介

    一个应用(NSApplication对象)维护着一组窗口(NSWindow)列表,这些窗口都属于这个App,每个窗口对象又维护着一组继承自NSView的对象,这些NSView对象通常用来绘制交互界面以及处理响应事件...).默认情况下,OSX中每个线程都有自己的runloop.NSAPplication 主线程的runloop称为main runloop,主事件循环的一个显著特点是它由NSApplication对象创建的事件输入源...鼠标(或触控板)事件派发路径 前面已经提到过,一个NSWindow对象使用sendEvent:方法将鼠标事件派发给用户操作的视图(NSView)对象.那么NSWindow是怎样识别是哪个NSView在被用户操作呢...key Window窗口中的一个(NSButton)按钮时,这个点击动作仅仅是将这个窗口(NSWindow)对象变成key Window而已,你还需要使用鼠标再次点击这个按钮,此时这个按钮才会接收到鼠标点击的事件...:方法 键盘事件派发路径 响应键盘输入是事件派发中最复杂的部分之一.Cocoa 应用程序会遍历每一个键盘事件来确定它属于那种类型然后以及如何处理.先来看一下苹果官方给出的一个键盘事件可能的传递传递路径:

    2.9K60

    2020-5-22-如何使WPF在窗口外部区域可拖动缩放

    今天来和大家聊如何使WPF在窗口外部区域可拖动缩放。 ---- 问题来源 对于WPF窗口来说,默认的可拖动缩放区域较小。 在某些应用场景下我们期望能够设置一个较大的可拖动的缩放区域。...这个行为有很多实现方法,最简单的一种是,让辅助窗口假装自己是主窗口的非客户区。 听着很复杂,实际做起来很简单,就是在辅助窗口被点击时,给主窗口发一个非客户区被点击的win消息。...有了双向的通知机制后,需要接下来需要将辅助窗口设置为透明。...这里参考了毅仔同学的高性能透明窗口做法。 具体内容不做详细讲解,有兴趣的同学可以参考毅仔同学的博客。...WPF 制作高性能的透明背景异形窗口(使用 WindowChrome 而不要使用 AllowsTransparency=True) - walterlv 关键代码如下 //设置窗口非客户区大小为0 ResizeMode

    2.1K10

    行为变更 | Android 12 中不受信任的触摸事件

    我们在 Android 12 中进行了一些变更,来提升应用和平台的安全性,进而使我们的用户能够拥有更安全的使用体验。回顾关于隐私和安全的文章,请参阅: 政策更新 | 开发者如何处理软件包可见性。...因为对下层其他应用的触摸事件会被屏蔽,所以这样的方法在 Android 12 上就不再起作用了 (注意与前面提到的豁免条件的区别,在这里我们改变的是内部视图,而不是窗口)。...半透明窗口 如果您使用了一个 TYPE_APPLICATION_OVERLAY 窗口,并需要在显示内容时允许触摸事件穿透下去,那您就必须降低窗口的不透明度,让用户能够合理地看到他们在窗口后所触摸的 UI...您必须在 窗口级别 上降低不透明度,仅仅改变视图的不透明度是不行的。...无障碍服务 当使用 AccessibilityService (无障碍服务) 时,它可以创建 TYPE_ACCESSIBILITY_OVERLAY 类型的窗口,这些窗口是可信任的,因此可以免于前面所描述的一些限制

    1.6K30
    领券