你能得到 NativeWindow 最小化的事件吗?
Posted
技术标签:
【中文标题】你能得到 NativeWindow 最小化的事件吗?【英文标题】:Can you get the NativeWindow minimized event? 【发布时间】:2012-01-31 00:35:58 【问题描述】:在 AIR 中使用 NativeWindow
时,每次最小化/未最小化窗口时,您能否获得一个事件?我尝试与DisplayStateChanged
连接,但当窗口最小化时它不会触发。你知道如何获得这样的活动吗?
我使用的是 32 位 Windows 7,并且正在运行 AIR 3.5。
这是初始化代码:
var init:NativeWindowInitOptions = new NativeWindowInitOptions();
init.maximizable = true;
init.resizable = true;
init.type = NativeWindowType.NORMAL;
init.minimizable = true;
window = new NativeWindow(init);
window.alwaysInFront = true;
window.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGE, dispChange, false, 0, true);
这是处理程序:
private function dispChange(e:NativeWindowDisplayStateEvent):void
// if minimized / un-minimized
if (e.beforeDisplayState == NativeWindowDisplayState.NORMAL && e.afterDisplayState == NativeWindowDisplayState.MINIMIZED)
trace("MINIMIZED!");
else if (e.beforeDisplayState == NativeWindowDisplayState.MINIMIZED && e.afterDisplayState == NativeWindowDisplayState.NORMAL)
trace("Un-MINIMIZED!");
【问题讨论】:
您需要显示一些代码并描述发生这种情况的环境(如操作系统等)! 请显示无效代码... 显示代码。这对你有用吗? 我敢打赌,是你的监听器中的弱引用做到了。尝试删除addEventListener()
函数调用中的最后三个参数。
我收到最大化和未最大化的事件,所以不是这样。
【参考方案1】:
窗口实际上是否可以最小化(检查window.minimizable
,而不仅仅是init
设置)?
我也想知道结果:
if (e.beforeDisplayState == NativeWindowDisplayState.MINIMIZED) trace("min before");
if (e.afterDisplayState == NativeWindowDisplayState.MINIMIZED) trace("min after");
我还想知道上面“弱参考”评论的结果。这会影响垃圾回收,因此测试总是一件好事。
【讨论】:
【参考方案2】:以下内容在 AIR 3.3 / Flash Player 11.3 的 Windows 7 64 位上运行良好。
import flash.display.NativeWindowDisplayState;
import flash.events.NativeWindowDisplayStateEvent;
~
stage.nativeWindow.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGE, displayStateChangeEventHandler);
~
private function displayStateChangeEventHandler(event:NativeWindowDisplayStateEvent):void
switch (stage.nativeWindow.displayState)
case NativeWindowDisplayState.MINIMIZED: trace("window was minimized");
break;
case NativeWindowDisplayState.NORMAL: trace("window is normal");
【讨论】:
【参考方案3】:最接近最小化事件的是激活事件。每当用户在应用程序外部单击时,该窗口就会被停用。然后,您可以使用 minimize() 自动最小化窗口。但是当用户最小化窗口/切换到另一个时,也会调用 deactivated 事件。当用户切换回来时,您会接到激活电话。
window.addEventListener(Event.ACTIVATE, dispActive, false, 0, true);
window.addEventListener(Event.DEACTIVATE, dispDective, false, 0, true);
private function dispActive(e:Event):void
// un-minimized
private function dispDective(e:Event):void
// deactivated .. minimize again to be sure
window.minimize();
【讨论】:
【参考方案4】:我得到最小化/ unminimize事件。我正在构建一个 AIR 3.5 应用程序。
window = stage.nativeWindow;
window.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGE, dispChange, false, 0, true);
function dispChange(e:Event):void
minimized = (window.displayState == "minimized");
if (minimized)
trace("minimized!")
else
trace("UN-minimized!")
【讨论】:
以上是关于你能得到 NativeWindow 最小化的事件吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用JSoup,你能得到一个节点在html中的位置/索引吗?