【发布时间】:2018-06-24 09:09:43
【问题描述】:
我在这个问题中使用公认的答案:JavaFX Minimizing Undecorated Stage 来正确最小化我的应用程序。
然而,不幸的是,默认的 Windows 最小化和最大化 动画 根本没有显示(窗口只是出现然后消失)。
我知道可以使用未装饰的窗口显示动画,因为我有一个具有这种行为的应用程序 (PotPlayer)。
如何使动画与 JNA 一起出现?
编辑:这是一个有效的 Kotlin 代码片段,可以正确最小化 JavaFX 窗口,还增加了赏金。
fun makeMinimizable(stage: Stage) {
val user32 = User32.INSTANCE
val hWnd = user32.FindWindow(null, stage.title)
val oldStyle = user32.GetWindowLong(hWnd, WinUser.GWL_STYLE)
val newStyle = oldStyle or 0x00020000 // WS_MINIMIZEBOX
user32.SetWindowLong(hWnd, WinUser.GWL_STYLE, newStyle)
}
【问题讨论】:
-
我刚刚在win7上测试过,它只有旧风格主题的动画。打开 aero 主题或关闭动画时,它不会动画。我可以建议的是找到你说的程序的窗口。然后让它打印出窗口样式并尝试在你的程序中设置它。
-
在你的代码中看起来你添加了样式 WS_BORDER 和 WS_MINIMIZEBOX
-
哦,是的,0x00080000 是我刚刚尝试过的,不小心把它留在了里面。我会尝试你的建议!
-
@brian 嗯。我尝试将 oldStyle 变量设置为与 Potplayer 相同。我没有尝试解析单个样式,而只是将“oldStyle”设置为:-1764818944。 (你可以自己试试)。这实际上有效 - 窗口未装饰,并且确实出现了最小化动画,但是,一旦我恢复窗口,窗口就不再未装饰。有什么想法吗?
-
我刚刚用 potplayer 得到了同样的结果。还有 GWL_EXSTYLE 设置,但它们没有任何区别。 Javafx 必须做一些不同的事情,但我不知道是什么。