标签: aero-snap

这是教授Java框架有关Windows的Aero Snap功能的唯一方法吗?

如果我JFrame通过单击Windows WindowDecoration的最小化按钮并通过Alt-Tabbing最小化它或在Windows任务栏中单击它来最小化Aero-snapped到屏幕左侧,那么框架将正确地恢复到左侧.好!

但是,如果我最小化帧

setExtendedState( getExtendedState() | Frame.ICONIFIED );
Run Code Online (Sandbox Code Playgroud)

并通过将鼠标悬停在Windows TaskBar上来查看预览,它会将框架显示错误的位置.通过Alt-Tabbing取消最小化或在Windows任务栏中单击它后,框架将在此错误的位置和大小恢复.帧边界是"未绑定"值,如果您将帧拖离ScreenBorder,Windows通常会记住恢复该值.

Bug的屏幕录制:

在此输入图像描述

我的结论是,Java不了解AeroSnap并向Windows提供了错误的界限.(例如,Toolkit.getDefaultToolkit().isFrameStateSupported( Frame.MAXIMIZED_VERT ) );返回false.)

这是我对bug的修复:

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Point;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

/**
 * Fix for the "Frame does not know the AeroSnap feature of Windows"-Bug.
 *
 * @author bobndrew 20160106
 */
public class SwingFrameStateWindowsAeroSnapBug extends JFrame
{
  Point     location = null;
  Dimension size     = null;


  public SwingFrameStateWindowsAeroSnapBug( final String title )
  {
    super( title ); …
Run Code Online (Sandbox Code Playgroud)

java swing minimize jframe aero-snap

28
推荐指数
1
解决办法
925
查看次数

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

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

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

这里有一个类似的问题 如何检测窗口是否被Windows7调整大小,但在这种情况下,似乎OP只是想要恢复位置,而不是"Snap"状态.

winapi windows-7 aero-snap

11
推荐指数
1
解决办法
2053
查看次数

为什么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文件夹以排除任何插件的干扰.

编辑:根据马修的回复和信息:help bugs,我发送了一个错误报告(实际上这篇文章)bugs@vim.org

vim aero-snap

11
推荐指数
1
解决办法
1172
查看次数

Aero Snap不适用于我的应用程序

我有一个问题,Aero Snap没有使用我正在处理的应用程序(Windows桌面,本机C++应用程序),我对发生的事情感到有点困惑,因为它看起来应该只是起作用,框.

我在mininal 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 nVirtKey: VK_LWIN c重复:1 ScanCode:5B f重复: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 …

c++ winapi aero windows-7 aero-snap

7
推荐指数
1
解决办法
3527
查看次数

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

如何使用Aero Snap功能查明窗口是否已调整大小?GetWindowPlacementfunction提供最新的"恢复"窗口大小.我用它如下:

WINDOWPLACEMENT wp = {};
wp.length = sizeof(WINDOWPLACEMENT);
::GetWindowPlacement( hWnd, &wp );
Run Code Online (Sandbox Code Playgroud)

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

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

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


好吧,我用notepad.exe(以及一些其他标准的Windows组件)进行了几次测试,并以同样的方式保存其状态 - 它不记得它是否"被抢购".所以我认为这是Windows程序的预期行为.

c++ windows winapi windows-7 aero-snap

7
推荐指数
1
解决办法
5456
查看次数

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

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

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

如何将Aero Snap实现为无边框Qt应用程序?谢谢.

qt borderless aero-snap

6
推荐指数
1
解决办法
2114
查看次数

启动WinForm应用程序Aerosnaped Right Aligned

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

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

Width = Screen.PrimaryScreen.WorkingArea.Size.Width / 2;
Height = Screen.PrimaryScreen.WorkingArea.Size.Height;
Top = Screen.PrimaryScreen.WorkingArea.Top;
Left = Screen.PrimaryScreen.WorkingArea.Left + 
       Screen.PrimaryScreen.WorkingArea.Size.Width / 2;
Run Code Online (Sandbox Code Playgroud)

在我的表单的加载事件中.这很好用,除非他们使用WindowKey + Arrow,它就好像它只是一个正常位置的形式.这意味着WindowKey + Right在第一次按下时不执行任何操作,并且WindowKey + Left向左按下.这不是一个主要问题,但我更愿意,如果我可以指定一个窗口大小然后将应用程序捕捉到右侧,那么这些键的行为与任何其他应用程序一样.

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

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

c# winforms aero-snap

5
推荐指数
1
解决办法
319
查看次数

以编程方式调用Snap / Aero最大化

有没有办法针对特定的窗口/窗口ID使用C或C ++以编程方式调用Aera最大化效果?

例如:

在此处输入图片说明

要么

在此处输入链接说明
(来源:thebuzzmedia.com

我正在使用无边界的Qt窗口,并且Qt具有用于获取窗口ID的API。我想以编程方式触发没有已知触发器的Windows效果。

c++ winapi qt aero aero-snap

5
推荐指数
1
解决办法
2876
查看次数

如何以编程方式使用C#代码中的aero snap功能

我有一个简单的问题.如何从我的C#代码以编程方式访问aero snap.就像,如果我单击"Snap Left"按钮,我希望我的程序窗口向左侧拍摄,就像它手动放在那里的药物一样.我看起来都是如此,但所有的问题似乎都是关于aero snap不使用表单,并防止它捕捉表单.不是以编程方式捕捉表单.我很高兴使用interloping.谢谢

c# operating-system winforms aero-snap

2
推荐指数
1
解决办法
2437
查看次数

标签 统计

aero-snap ×9

winapi ×4

c++ ×3

windows-7 ×3

aero ×2

c# ×2

qt ×2

winforms ×2

borderless ×1

java ×1

jframe ×1

minimize ×1

operating-system ×1

swing ×1

vim ×1

windows ×1