问题标签 [layered-windows]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
63 浏览

windows - 添加透明图层后如何防​​止下拉菜单消失

我已经构建了一个应用程序,它在 Windows 桌面应用程序的上下文中添加了屏幕上的应用程序帮助。当帮助对象与下拉菜单相关时,我遇到了添加透明覆盖时下拉菜单消失的问题。我应该使用哪些属性来保持下拉菜单可见?请参阅以下代码,其中我定义了要在当前前景窗口顶部绘制的窗口:

在某个阶段,应绘制窗口:

我的猜测是我在属性上做错了什么,以及应该在顶部/激活/到前景等的窗口等等。

你能给我一些线索,让我更深入地研究这个问题吗?

0 投票
0 回答
149 浏览

winapi - 在 Windows 中使按钮颜色透明

我想创建具有自定义形状的按钮,所以我决定在分层窗口的帮助下完成。我为按钮创建窗口,为其设置位图,使其分层,然后尝试使白色完全透明。我一写masm,代码如下:

但是位图上的白色不会变得透明,尽管它与我的自定义窗口形状一起使用。

我怎样才能使这项工作?

0 投票
1 回答
855 浏览

windows - 窗口区域与分层窗口

我正在寻找为应用程序窗口(边框半径和阴影)创建自定义圆角框架从性能的角度来看,最好的技术是什么?

一个。对圆形应用程序窗口使用区域 (SetWindowRgn),对阴影使用分层窗口 (UpdateLayeredWindow)。

湾。对圆形应用程序窗口和阴影使用分层窗口。

UpdateLayeredWindow的文档指定:

为了通过分层窗口和任何底层窗口获得最佳绘图性能,分层窗口应尽可能小。

我专门针对应用程序主窗口提出这个问题,因此一个大窗口可能具有很高的复杂性并且大部分时间都在屏幕上可见。

我应该为应用程序窗口选择区域还是分层窗口?哪一个会在 CPU/内存上更轻?

0 投票
1 回答
125 浏览

winapi - 使用 GDI+ 绘制亚洲文字会在分层窗口上显示透明字符

我有一个分层窗口,我自己创建了WS_EX_LAYERED扩展样式和UpdateLayeredWindow功能。

然后我使用 GDI+ 库Graphics::DrawString方法在其中绘制一些文本。

结果是这样 的: 分层窗口的屏幕截图

如您所见,日文、韩文和中文字符是完全透明的。他们甚至使窗口的白色背景透明,根本不透明。

只有在禁用桌面组合(Aero 主题)时,该问题才会出现在 Windows Vista 和 Windows 7 上。
在 Windows 10 上它工作正常,因为桌面组合总是在那里启用。

为什么这种奇怪的效果只发生在东亚字符身上?
以及如何解决这个问题?

0 投票
2 回答
239 浏览

winapi - 启用 LWA_COLORKEY 时如何防止颜色键明显闪烁

我有一扇窗户,有时应该有一个透明的洞,有时没有。理想情况下,我们会使用 SetWindowRgn,但这会禁用视觉样式,这不仅看起来很难看,而且无法正确绘制每个监视器的 DPI 感知,因此我尝试使用带有颜色键的分层窗口。

启用颜色键时,我首先调用SetLayeredWindowAttributes(hWnd, colorkey, 0, LWA_COLORKEY),然后使窗口无效以便重绘。此时窗口不应包含关键颜色。然后窗口WM_PAINT在稍后的某个时间接收,并且绘制了键颜色,但是此时窗口应该已经LWA_COLORKEY设置,所以我再次希望键颜色不可见。

禁用颜色键时,我首先(同步)重新绘制窗口,使其不包含键颜色,然后禁用WS_EX_LAYERED,所以我从没想过会看到键颜色。

但是,当鼠标在其上移动时,具有以下窗口过程的窗口会在绿色、透明和背景颜色之间不断闪烁。

似乎可能SetLayeredWindowAttributes不会立即生效(甚至在下一个之前WM_PAINT)。如何确保此属性在重新绘制之前已生效,或以其他方式阻止关键颜色可见?

0 投票
2 回答
70 浏览

c# - c# - 如果条件:单击鼠标键和 bAlpha

在下面的主题中,有一些关于如何
使用一个按钮为两种方法创建切换的建议:
how-can-i-switch-between-two-methods-in-one-button-with-every-click

我怎么能用一个特定的鼠标按钮来实现这样的事情(例如在两个 LayeredWindowsAttributes 之间切换)?

或者我该如何编写以下代码?
右键单击 && bAlpha = 10:将透明度值设置为 255
右键单击​​ && bAlpha = 255:将透明度值设置为 10

这里的主要问题可能是我不知道如何像条件一样检查 bAlpha。

这就是我设置 bAlpha 值的方式:

0 投票
0 回答
98 浏览

delphi - 移除遮罩颜色 LWA_COLORKEY

LWA_COLORKEY在透明的文本上留下蒙版颜色。是否可以将其移除并使透明整洁干净?

https://imgur.com/IQ2yP3b它要离开了clAqua

0 投票
0 回答
68 浏览

c++ - 分层窗口大小大于内容大小

我想创建一个分层窗口,其大小大于其内容(hdcSrc)的大小。例如,窗口是 900x900,我们可以将 300x300 的图像放置在我们想要的任何位置,而窗口的其余部分是透明的。

到目前为止,这是我的代码:

这将创建一个与在其上绘制的图像大小完全相同的窗口。我们可以减小窗口大小:SIZE windowSize = { imageWidth-100, imageHeight-100 };窗口将按预期绘制 - 尺寸更小,而图像大小相同但现在被剪裁(在这种情况下,矩形被剪裁)。

但是,如果我们想实现我在开始时描述的内容,那SIZE windowSize = { imageWidth+100, imageHeight+100 };是行不通的。该窗口根本没有呈现,但它打开了(窗口任务栏图标可见)。

我可能还不能完全理解分层窗口是如何工作的,这就是为什么我不明白为什么在这个例子中它没有被渲染。

有可能创建这样一个分层的窗口吗?如果是,那怎么办?

或者也许这根本不是我应该做的事情?

就像一个注释:我想这样做的原因是使用分层窗口作为一种覆盖,这将始终是屏幕的大小,但图像、图形和文本会被绘制在上面,并更新,搬家等等。