问题标签 [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.
actionscript-3 - Air Native 窗口 Active 窗口更改
我有一个有 2 个窗口的 Adobe Air 应用程序(AS3,而不是 Flex)。当我从它们那里单击另一个桌面程序时,我会收到一个“停用”事件(如您所料)。
当我点击说 Window#1 时,我得到一个“激活”事件(如您所料)。
但是当我从 Window#1 转到 Window#2 时,我什么也得不到。我相信这是因为 Air 应用程序仍然是活动程序,只是一个不同的窗口。
但是我需要知道何时从一个窗口转到另一个窗口。
到目前为止,我想出的可怕解决方案是onEnterFrame
检查当前窗口是否为活动窗口。但我更愿意以一种更好的方式来做这种黑客攻击。
虽然我已经走了Stage
,但事件NativeApplication
和Native Window
他们都没有做我需要的事情。谁能指出我可能忽略的另一个事件?
actionscript-3 - 忽略 nativeWindow 事件侦听器
这一直困扰着我好几天,似乎永远谷歌搜索后无法得到答案......
问题很简单,
我有一个带有事件监听器的矩形,如下所示:
这很好用。
我在这个矩形内还有一个按钮,当我单击该按钮时,窗口就像我单击矩形一样拖动。
我怎样才能阻止这种情况发生?我尝试删除该事件,但没有成功,我什至不知道要删除哪个事件,mouseDown 或 NativeDrag 事件... nativeWindow 中没有 stopDrag() 函数。有简单的解决方案吗?
任何帮助都非常感谢!
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 资源,但规范允许。被警告!
actionscript-3 - AIR - 设置 NativeWindow 的大小以包括系统镶边
如何找出系统chrome的大小,以便我可以指定窗口大小以达到我想要的舞台大小?
如果我的主窗口设置为 800 x 600(舞台),并且我创建如下第二个窗口,它会更小。
我假设您同时增加newWindow.width = 800;
并newWindow.height = 600;
考虑 chrome,但是您如何找到这个值?
android - SurfaceView 和 ANativeWindow
我有一个关于创建 SurfaceView 并随后从中获取 ANativeWindow 的问题。
- 这样做是否合适
mSurfaceView = new SurfaceView(this);
:
onCreate()
onStart()
问的原因:据我了解,当我们失去焦点时 SurfaceView 会被破坏(其他东西会覆盖整个屏幕)所以我们每次获得焦点时都需要重新创建它(执行 onStart() )。或者 SurfaceView 是否保持休眠和可重复使用?
继续前进,现在我想从上述表面创建一个本机窗口(在本机代码中)。这样做是否合适
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。
如果有人能为我阐明这个问题,我将不胜感激。
flash - 当主应用程序关闭时关闭子 nativeWindows(通过操作系统)
我已经为此发疯了!我有一个 Air (2.6) 应用程序,它在运行时会弹出一个 NativeWindow 来处理警报。
这一切都很好 - 通过关闭按钮关闭应用程序时,我调用:
我在所有平台上都没有遇到任何问题。但是在 Windows7 中,当右键单击任务栏并选择“关闭窗口”时,只会关闭主应用程序而不是其子 NativeWindow。(这使应用程序在后台运行 - 因此当用户尝试再次访问它时它不会运行)我尝试添加事件侦听器,如 Event.CLOSING 和其他各种方法,但都失败了。如果有人对如何从 windows7 中的“关闭窗口”选项关闭窗口有任何想法。
谢谢你的帮助
城野
actionscript-3 - 如何检测从 AIR NativeWindowBoundsEvent 开始调整大小的角或边缘?
如果您使用 startResize(EdgeOrCornerString) 手动开始调整大小,则必须设置 EdgeOrCornerString。但是如何检测从内部(NativeWindowBoundsEvent)调整大小处理程序中单击了哪个边缘或角?event.type 只给出“调整大小”,没有指定边或角。有可能吗?如果可以,怎么做?
编辑:我想自定义调整 NativeWindow 的大小,并且需要知道用户从哪个角落或边缘开始调整大小操作。
actionscript-3 - 如何从 NativeWindow 对象访问 NativeWindow 的包装类 (mx:Window) 属性
假设我有一个名为 myCustomWindow 的 Window 组件。然后我创建新窗口:
myCustomWindow 具有名为 myProperty 的公共属性。
如何从 NativeWindow 访问 myCustomWindow?例如,如何在此循环中执行此操作:
c# - 将 NativeWindow 用于 ComboBox 会导致 Dispose 方法出现异常
在 C# Windows.Forms 中,我想拦截组合框的粘贴窗口消息。由于这不能通过覆盖组合框的 WndProc 方法来实现,因为我需要覆盖组合框内文本框的 WndProc,所以我决定创建一个 NativeWindow 类型的自定义类来覆盖 WndProc。当组合框句柄被破坏时,我分配句柄并释放它。但是,当调用组合框的 Dispose 时,问题是我得到一个 InvalidOperationException 表示发生了无效的跨线程操作,并且组合框是从创建它的线程以外的线程访问的。任何想法这里出了什么问题?
在下文中,您将看到我的课程的外观:
c# - 在 NativeWindow 中等待消息
我正在尝试做的是WM_TIMER
在我的进程中的窗口上捕获并等待消息(尽管我无法控制)。
我正在尝试使用 anAutoResetEvent
来等待消息。
该WaitForMaterialUpdate
方法将 连接NativeWindow
到窗口,并阻塞直到收到消息。
这是我正在使用的代码:
我不是在一个非常可调试的环境中,但我已经确认使用MessageBox
该窗口实际上WM_TIMER
在等待期间接收消息,但WaitOne
总是在返回之前等待完整的 5000 毫秒超时时间。
知道我哪里出错了吗?