问题标签 [nativewindow]

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 投票
1 回答
907 浏览

actionscript-3 - Air Native 窗口 Active 窗口更改

我有一个有 2 个窗口的 Adob​​e Air 应用程序(AS3,而不是 Flex)。当我从它们那里单击另一个桌面程序时,我会收到一个“停用”事件(如您所料)。

当我点击说 Window#1 时,我得到一个“激活”事件(如您所料)。

但是当我从 Window#1 转到 Window#2 时,我什么也得不到。我相信这是因为 Air 应用程序仍然是活动程序,只是一个不同的窗口。

但是我需要知道何时从一个窗口转到另一个窗口。

到目前为止,我想出的可怕解决方案是onEnterFrame检查当前窗口是否为活动窗口。但我更愿意以一种更好的方式来做这种黑客攻击。

虽然我已经走了Stage,但事件NativeApplicationNative Window他们都没有做我需要的事情。谁能指出我可能忽略的另一个事件?

0 投票
1 回答
182 浏览

actionscript-3 - 忽略 nativeWindow 事件侦听器

这一直困扰着我好几天,似乎永远谷歌搜索后无法得到答案......

问题很简单,

我有一个带有事件监听器的矩形,如下所示:

这很好用。

我在这个矩形内还有一个按钮,当我单击该按钮时,窗口就像我单击矩形一样拖动。

我怎样才能阻止这种情况发生?我尝试删除该事件,但没有成功,我什至不知道要删除哪个事件,mouseDown 或 NativeDrag 事件... nativeWindow 中没有 stopDrag() 函数。有简单的解决方案吗?

任何帮助都非常感谢!

0 投票
2 回答
6229 浏览

android - ICS 上的 eglCreateWindowSurface,以及从 2D 切换到 3D

我正在尝试在 Android ICS 上制作基于 NDK 的游戏。它在 Honeycomb 和 Gingerbread 上运行良好。

游戏使用一些 2D 渲染,一些 3D 渲染,在执行的不同阶段在两者之间切换。(由于第三方代码,这是不可协商的。)我们使用ANativeWindow_lock()/ANativeWindow_unlockAndPost()进行 2D 渲染,而eglCreateWindowSurface()/ gl*()/eglSwapBuffers()用于 3D 渲染。

在 Honeycomb 和 Gingerbread 上,这一切都很好。在 ICS 上,eglCreateWindowSurface()失败并在日志中显示以下消息:

查看源代码似乎很明显eglCreateWindowSurface()失败了,因为有些东西打开了本机窗口以进行 2D 渲染,并且它不会让我在不首先释放表面的情况下将其更改为 3D。但是,ANativeWindow API 似乎没有任何明显的方法可以做到这一点。

有没有其他人遇到过这个问题,解决方案是什么?

更新

因此,我重写了我的 2D 渲染代码以改用 OpenGL 基元(将后缓冲区上传到纹理,通过一对三角形渲染纹理,交换缓冲区)。这在一定程度上起作用。现在发生的事情是 2D 渲染工作正常;然后我破坏了表面,创建了一个新的表面以准备 3D 渲染,第二次调用eglCreateWindowSurface()失败。这一次,与:

...它会引发 EGL 错误AEGL_BAD_NATIVE_WINDOW

请注意,新曲面的创建属性与旧曲面完全相同。我什至尝试确保在两次调用之间调用eglTerminate()/ 。eglInitialize()eglCreateWindowSurface()

我可以精确地使用每个 ANativeWindow 一次吗?如果是这样,那难道不会通过 Khronos 的 EGL 一致性测试吗?那么有没有办法让 NativeActivity 重新创建窗口呢?

更新更新

eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT)事实证明,最后一个问题是由于我在破坏上下文和表面之前未能调用造成的。这导致破坏被延迟,直到线程解除上下文和表面的绑定,当然不是,因此导致调用eglCreateWindowSurface()合法失败(您不能在同一个本机窗口上有两个窗口表面)。

有点违反直觉,因为人们会假设调用eglTerminate()会破坏所有 EGL 资源,但规范允许。被警告!

0 投票
3 回答
3814 浏览

actionscript-3 - AIR - 设置 NativeWindow 的大小以包括系统镶边

如何找出系统chrome的大小,以便我可以指定窗口大小以达到我想要的舞台大小?

如果我的主窗口设置为 800 x 600(舞台),并且我创建如下第二个窗口,它会更小。

我假设您同时增加newWindow.width = 800;newWindow.height = 600;考虑 chrome,但是您如何找到这个值?

0 投票
1 回答
7298 浏览

android - SurfaceView 和 ANativeWindow

我有一个关于创建 SurfaceView 并随后从中获取 ANativeWindow 的问题。

  1. 这样做是否合适

    mSurfaceView = new SurfaceView(this);

    • onCreate()
    • onStart()

问的原因:据我了解,当我们失去焦点时 SurfaceView 会被破坏(其他东西会覆盖整个屏幕)所以我们每次获得焦点时都需要重新创建它(执行 onStart() )。或者 SurfaceView 是否保持休眠和可重复使用?

  1. 继续前进,现在我想从上述表面创建一个本机窗口(在本机代码中)。这样做是否合适

    ANativeWindow* newwindow = ANativeWindow_fromSurface(jniEnv, joSurface)

    • onSurfaceCreated_native(..., jobject surface)
    • onSurfaceChanged_native(..., jobject surface)

问的原因:onSurfaceChanged 似乎总是被调用,onSurfaceCreated所以我们可以选择何时创建本机窗口。一方面,在 中执行此操作似乎是合乎逻辑的onSurfaceCreated,但两者jobject surface似乎引用了不同的对象!(通过在 onSurfaceCreated 中创建对表面的弱全局引用并在 onSurfaceChanged 中针对 NULL 和表面检查它进行检查,请参见下面的代码)

onSurfaceCreated_native(JNIEnv env, ... ,jobject surface) {
myWeakObjectGlobal = env->NewWeakGlobalRef(surface);
}

onSurfaceChanged_native(JNIEnv env, ... ,jobject surface) {

}

因此,如果确实有两个不同的表面对象被发送到 onSurfaceCreated 和 onSurfaceChanged,那么我们希望使用最新的一个而不是挂在过时的表面引用上,因此在 onSurfaceChanged 中执行 ANativeWindow_from_Surface。

如果有人能为我阐明这个问题,我将不胜感激。

0 投票
1 回答
407 浏览

flash - 当主应用程序关闭时关闭子 nativeWindows(通过操作系统)

我已经为此发疯了!我有一个 Air (2.6) 应用程序,它在运行时会弹出一个 NativeWindow 来处理警报。

这一切都很好 - 通过关闭按钮关闭应用程序时,我调用:

我在所有平台上都没有遇到任何问题。但是在 Windows7 中,当右键单击任务栏并选择“关闭窗口”时,只会关闭主应用程序而不是其子 NativeWindow。(这使应用程序在后台运行 - 因此当用户尝试再次访问它时它不会运行)我尝试添加事件侦听器,如 Event.CLOSING 和其他各种方法,但都失败了。如果有人对如何从 windows7 中的“关闭窗口”选项关闭窗口有任何想法。

谢谢你的帮助

城野

0 投票
1 回答
269 浏览

actionscript-3 - 如何检测从 AIR NativeWindowBoundsEvent 开始调整大小的角或边缘?

如果您使用 startResize(EdgeOrCornerString) 手动开始调整大小,则必须设置 EdgeOrCornerString。但是如何检测从内部(NativeWindowBoundsEvent)调整大小处理程序中单击了哪个边缘或角?event.type 只给出“调整大小”,没有指定边或角。有可能吗?如果可以,怎么做?

编辑:我想自定义调整 NativeWindow 的大小,并且需要知道用户从哪个角落或边缘开始调整大小操作。

0 投票
1 回答
220 浏览

actionscript-3 - 如何从 NativeWindow 对象访问 NativeWindow 的包装类 (mx:Window) 属性

假设我有一个名为 myCustomWindow 的 Window 组件。然后我创建新窗口:

myCustomWindow 具有名为 myProperty 的公共属性。

如何从 NativeWindow 访问 myCustomWindow?例如,如何在此循环中执行此操作:

0 投票
1 回答
1319 浏览

c# - 将 NativeWindow 用于 ComboBox 会导致 Dispose 方法出现异常

在 C# Windows.Forms 中,我想拦截组合框的粘贴窗口消息。由于这不能通过覆盖组合框的 WndProc 方法来实现,因为我需要覆盖组合框内文本框的 WndProc,所以我决定创建一个 NativeWindow 类型的自定义类来覆盖 WndProc。当组合框句柄被破坏时,我分配句柄并释放它。但是,当调用组合框的 Dispose 时,问题是我得到一个 InvalidOperationException 表示发生了无效的跨线程操作,并且组合框是从创建它的线程以外的线程访问的。任何想法这里出了什么问题?

在下文中,您将看到我的课程的外观:

0 投票
1 回答
869 浏览

c# - 在 NativeWindow 中等待消息

我正在尝试做的是WM_TIMER在我的进程中的窗口上捕获并等待消息(尽管我无法控制)。

我正在尝试使用 anAutoResetEvent来等待消息。

WaitForMaterialUpdate方法将 连接NativeWindow到窗口,并阻塞直到收到消息。

这是我正在使用的代码:

我不是在一个非常可调试的环境中,但我已经确认使用MessageBox该窗口实际上WM_TIMER在等待期间接收消息,但WaitOne总是在返回之前等待完整的 5000 毫秒超时时间。

知道我哪里出错了吗?