0

我正在使用佳能 SDK 从相机获取事件。在 SDK 中,我们注册了一个回调函数,当特定事件发生时调用该函数。我已经构建了一个与 SDK 通信的 Java 包装器。

但是当事件被触发时,我的窗口并没有直接得到事件。事实上,在 Windows 上,这就是我获取事件并将其发送给自己的方式:

private static final User32 lib = User32.INSTANCE;
boolean hasMessage = lib.PeekMessage( msg, null, 0, 0, 1 ); // peek and remove
if( hasMessage ){
lib.TranslateMessage( msg ); 
lib.DispatchMessage( msg ); //message gets dispatched and hence the callback function is     called
}

基本上,如果窗口已接收到事件,则可以窥视,然后继续。在 Mac 上,可以使用CocoaNSApplication 并WindowServer发送事件(如果有)来完成。

我正在寻找类似的替代方案,使用X11. 任何示例代码/链接就足够了。

PS:这是对此的后续问题

4

1 回答 1

2

我想你正在寻找XPeekEvent. Xlib 有很好的文档记录,XNextEvent(3) 的手册页说:

The XPeekEvent function returns the first event from the event queue,
but it does not remove the event from the queue.  If the queue is
empty, XPeekEvent flushes the output buffer and blocks until an event
is received.  It then copies the event into the client-supplied XEvent
structure without removing it from the event queue.

可以在 wikibooks 上找到(例如)显示基本 Xwindow 和用于处理事件的主事件循环的示例代码。

于 2013-03-19T06:22:02.130 回答