问题标签 [aero-snap]

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 投票
2 回答
3862 浏览

c++ - Aero Snap 不适用于我的应用程序

我遇到了 Aero Snap 无法与我正在使用的应用程序(Windows 桌面、本机 C++ 应用程序)一起工作的问题,而且我对正在发生的事情有点困惑,因为它似乎应该可以正常工作,超出盒子。

我在一个最小的 win32 应用程序上使用了 Spy++,当我按下 Win-Left 时收到以下消息:

<00070> 00030D1C P WM_KEYDOWN nVirtKey:VK_LWIN cRepeat:1 ScanCode:5B fRepeat:0 fUp:0 <00071> 00030D1C P WM_KEYDOWN nVirtKey:VK_LWIN cRepeat:1 ScanCode:5B fRepeat:1 fUp:0 <00072> 00030D1C P WM_KEYDOWN nVirt VK_LWIN cRepeat:1 ScanCode:5B fRepeat:1 fUp:0 <00088> 00030D1C S WM_GETMINMAXINFO lpmmi:0043FCBC
<00089> 00030D1C R WM_GETMINMAXINFO lpmmi:0043FCBC
<00090> 00030D1C S WM_WINDOWPOSCHANGING lpwp:0043FCC4
<00091> 00030D1C S WM_GETMINMAXINFO lpmmi:0043F8E8
< 00092> 00030D1C R WM_GETMINMAXINFO lpmmi:0043F8E8
<00093> 00030D1C R WM_WINDOWPOSCHANGING
.. 等等

所以我可以看到左键的 WM_KEYDOWN 没有到达应用程序,但是我得到了 aero snap “resize window” 的东西。

当我 Spy++ 我的应用程序时,我可以看到左键没有被“拦截”,而是被传递给应用程序,所以我没有得到任何捕捉好处。

<00043> 000F0F12 P WM_KEYDOWN nVirtKey:VK_LWIN cRepeat:1 ScanCode:5B fRepeat:0 fUp:0
<00044> 000F0F12 P WM_KEYDOWN nVirtKey:VK_LWIN cRepeat:1 ScanCode:5B fRepeat:1 fUp:0
<00045> 000F0F12 P WM_KEYDOWN nVirt VK_LWIN cRepeat:1 ScanCode:5B fRepeat:1 fUp:0
<00060> 000F0F12 P WM_KEYUP nVirtKey:VK_LEFT cRepeat:1 ScanCode:4B fRepeat:0 fUp:1

我将深入研究消息处理的核心,看看发生了什么,但我会采用我能得到的所有提示:)

编辑我注意到 Win-Up 和 Win-Shift-Left/Right 实际上可以正常工作,所以只是 Win-Down 和 Win-Left/Right 没有被“气动”到正确的位置/大小。

编辑好吧,问题似乎是我的窗口不是用 WS_THICKFRAME 标志创建的。如果我添加标志,snap 工作。现在,我实际上并不想要那里的边界,但至少我知道是什么导致了奇怪的行为..

希望最后的编辑摆脱边框就像响应 WM_NCCALCSIZE 一样简单,并使客户端占据整个窗口。

0 投票
1 回答
1162 浏览

wpf - WPF 自定义窗口:无法使用 Win7 Aero Snap“取消捕捉”最大化窗口

我有一个使用自定义窗口框架的 WPF 应用程序。我的问题是我无法在 Windows 7 中使用 Aero Snap“取消捕捉”我的最大化窗口。

我的窗口的属性:

  • AllowsTransparency被设定为true
  • WindowStyle被设定为None
  • ResizeMode设置为CanResizeWithGrip

我像这样处理窗口拖动运动:

我可以将窗口停靠在左侧、右侧和顶部,并让它像普通窗口一样运行(分别展开以填充屏幕的左半部分、展开以填充屏幕的右半部分、最大化)。

我不确定 Aero Snap 是如何工作的,但我觉得奇怪的是普通的 WPF 窗口(非自定义窗口)工作得很好;如果它们被最大化而没有问题,我可以解开它们。那么为什么将上述属性应用到我的窗口会破坏呢?

是否有可能我需要做一些自定义的 WM 消息处理才能完成这项工作?

0 投票
1 回答
6523 浏览

c++ - GetWindowPlacement 给出了不正确的窗口位置

如何确定是否使用Aero Snap 功能调整了窗口大小?GetWindowPlacement函数给出最新的“恢复”窗口大小。我使用它如下:

例如,它给出wp.rcNormalPosition = {top=208 bottom=520 left=152 right=510},当它应该是 {top=0 bottom=1920 left=152 right=510}

请注意,GetWindowRect给出完全相同的错误结果。那是我的错,GetWindowRect给出了正确的结果。

我需要在程序退出时保存窗口状态并在启动时加载它,所以我需要知道窗口是如何放置的。如何找出实际的窗口坐标?


好吧,我用notepad.exe(和一些其他标准的 Windows 组件)做了几个测试,它以同样的方式保存它的状态——它不记得它是否被“捕捉”了。所以我想这是 Windows 程序的预期行为。

0 投票
2 回答
2363 浏览

winapi - 在 Windows 7 上保存和恢复 Aero Snap 位置

假设我有一个窗口,我想在窗口关闭时保存它的位置,并在窗口再次打开时恢复它。执行此操作的典型方法是调用 GetWindowPlacement / SetWindowPlacement。这需要记住位置和最大化/最小化状态。

在 Windows 7 上,您可以使用“Aero Snap”功能将窗口停靠在屏幕一侧。我的问题是如何保存和恢复已“捕捉”的窗口,以便恢复“捕捉”状态。GetWindowPlacement / SetWindowPlacement 不能解决这个问题(据我所知),我还没有在 Windows 7 中看到任何“Snap”API。

这里有一个类似的问题 How to detect window was resized by Windows7但在这种情况下,OP 似乎只想要恢复位置,而不是“Snap”状态。

0 投票
1 回答
356 浏览

c# - 启动 WinForm 应用程序 Aerosnaped 右对齐

这应该是一个简单的问题,但是 search-foo 让我失望了。我的目标是检测我在 Aero(Vista 或 Windows 7)下运行,并默认使用我的应用程序 Aerosnap。(事实证明,我写的一个公司应用程序是由几乎每个人在空中拍摄的,他们的 Outlook 是向左拍摄的。)

该应用程序是 WinForms,我目前正在做

在我表单的加载事件中。这很好用,除了如果他们使用 WindowKey+Arrow,它就好像它只是一个正常定位的表单。这意味着 WindowKey+Right 在第一次按下时什么都不做,而 WindowKey+Left 向左对齐。这不是一个主要问题,但如果我可以指定一个窗口大小,然后将应用程序对齐到右侧,那么我希望这些键可以像任何其他应用程序一样起作用。

我不确定这是否可能,以下是我确实找到的东西:

这些似乎表明没有可用的特殊 AeroSnap 消息。其他人知道吗?

0 投票
1 回答
1699 浏览

c# - 防止窗口捕捉到屏幕边缘

可能重复:
如何在应用程序中禁用 Aero Snap?

有没有办法防止 WPF 窗口捕捉到屏幕边缘(即 Aero 捕捉)?

我知道这可以由操作系统中的用户禁用,但我只想阻止我的窗口重新排列。

例如,模态窗口不会像那样被捕捉。我想它也可以为 WPF 窗口设置,但我不知道如何。

0 投票
2 回答
1580 浏览

vim - 为什么 gVim 在某些操作后会重新调整大小和重新定位?

几周前我开始使用gVim 。然而,从一开始,当我执行某些操作时,我注意到整个 gVim 窗口的一些奇怪的调整大小。我认为这与我使用 Windows Aero Snap(在 Windows 7 x64 系统上)有关。

重现步骤(使用空.vimrc文件,我的vimfiles文件夹重命名):

  1. 我打开gvim
  2. 我将我的 gvim 窗口放在显示器的左侧(点击几下)win+left arrow
  3. 我使用创建一个新标签:tabe

结果: gVim 将自己重新定位到屏幕上的其他位置。所以我必须使用win+重新定位它left arrow。很烦人。

我也有其他选项卡和窗口操作,例如::vnew, C-W o, ...

任何人有任何提示为什么会发生这种情况,我能做些什么来解决它?我已经清空了我的.vimrc文件并暂时重命名了我的 ~/vimfiles 文件夹以排除任何插件的干扰。

编辑:根据 Matthew 的回复以及关于 的信息:help bugs,我已将错误报告(实际上是这篇文章)发送到bugs@vim.org

0 投票
2 回答
2982 浏览

c# - 我如何以编程方式使用 C# 代码中的航空捕捉功能

我有一个简单的问题。如何从我的 C# 代码以编程方式访问 aero snap。就像,如果我单击一个“向左对齐”按钮,我希望我的程序窗口向左对齐,就像手动在那里药物一样。我查看了所有内容,但所有问题似乎都是关于 aero snap 不使用表单,并防止它捕捉表单。不是以编程方式捕捉表单。我很高兴使用 interloping。谢谢

0 投票
1 回答
2776 浏览

qt - 在 Qt 中使用无边框窗口的 Aero Snap

我正在尝试在 Qt 中创建 Metro 风格的界面,这意味着不使用 Windows 7 Aero 边框。我已经将窗口设置为无边框,并添加了代码以使其可拖动,并添加按钮以使其最小化、最大化和关闭。但是,Aero Snap 不起作用。

我知道这是可能的,因为 Visual Studio 2012、MS Word 2013 和 Steam 都有带有 Aero Snap 的无边框窗口。

如何将 Aero Snap 实现到无边界 Qt 应用程序中?谢谢。

0 投票
0 回答
239 浏览

windows - 在 Windows7 上,当我的应用程序以最大化状态挂起时,无论应用程序的窗口位置如何,始终在左上角创建幽灵窗口

在某些情况下,我们的应用程序 UI 线程必须进行繁重的处理,这可能需要 5 秒以上,如果发生这种情况,操作系统会认为我的应用程序被挂起,因此会创建一个幽灵窗口。

当我的应用程序处于恢复状态时,此幽灵窗口在我的应用程序顶部正确创建,但是当我的应用程序处于最大化状态时,此幽灵窗口始终选择 Point(0,0) 作为其左上角,因此看起来应用程序正在跳跃到左上角。我们能避免这种跳跃吗?

我不想为我的应用禁用幽灵窗口创建。一种解决方法可能是定期间隔后 PeekMessage(不要删除)。但是,如果可能的话,我希望在操作系统需要时出现幽灵窗口,但它应该正是我的应用程序在进入无响应状态之前所在的位置。

请注意,我们通过覆盖 WM_GETMINMAXINFO 自定义应用程序的最大窗口大小。

------------这就是我们设置自定义窗口大小的方式--------------