在 Eclipse RCP 中处理自定义设备事件
Process custom device event in Eclipse RCP
我有一个Eclipse RCP产品,可以很好地与键盘和鼠标配合使用。我想在我的产品中支持自定义硬件。为了在 Eclipse RCP 产品中启用该设备,我编写了 JNI 代码。此JNI代码初始化设备和驱动程序(工作正常)。调用此 JNI 方法后,RCP 应用程序代码开始接收 Display.readAndDispatch() 方法中的事件。我不明白的是,如何将此事件发送到我的小部件类。所有SWT小部件都有处理事件的windowProc方法。这些方法仅处理预定义的事件,并且它们是私有(包私有)方法,因此我无法事件覆盖它们。
在 http://www.eclipse.org/articles/Article-Writing%20Your%20Own%20Widget/Writing%20Your%20Own%20Widget.htm 页面的本机小部件部分,他们解释了如何在C++代码中添加指向 windowProc 方法的钩子。我尝试通过以下方式执行此操作:
JNIEXPORT jint JNICALL Java_com_aiit_iadss_framework_event_SpaceMouseEventManager_initInternal
(JNIEnv *env, jobject obj, jlong hwnd )
{
fprintf(stderr, "Initializing the space mouse module!");
//code to init the device & driver
if( res > 0 )
{
//the initialization was successful. Setup the 3D mouse event listener
WM_3DMOUSE = RegisterWindowMessage (_T("SpaceWareMessage00"));
//adding hook on RCP application window for WindowProc
oldProc = (WNDPROC) SetWindowLongPtr((HWND) hwnd, GWLP_WNDPROC, (long) WindowProc);
}
return res;
}
LRESULT CALLBACK WindowProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
int num; /* number of button returned */
//SiSpwEvent Event; /* 3DxWare Event */
//SiGetEventData EData; /* 3DxWare Event Data */
if( msg == WM_3DMOUSE )
{
fprintf( stderr, "Space mouse event caught!");
return (TRUE);
}
//call windowproc to handle other events
return CallWindowProc( oldProc, hwnd, msg, wParam, lParam );
}
当我运行上面的代码时,JVM 崩溃并带有访问冲突代码。你能帮我解决这个问题吗?
好的,我终于通过在 Java 代码中添加 WindowProc 处理程序来做到这一点,如下所示:
Callback winprocCallback = new Callback( MyEventProcessingClass.class, "windowProc", 4 );
MyEventProcessingClass.oldWinProc = OS.SetWindowLongPtr( shellHandle, OS.GWLP_WNDPROC,
winprocCallback.getAddress() );
windowProc 方法实现为:
public static long windowProc( long hwnd, long msg, long wparam, long lParam )
{
if( msg == 'My device event id' )
{
//process it & return 1;
}
return OS.CallWindowProc( SpaceMouseServiceImpl.oldWinProc, hwnd, (int) msg, wparam, lParam );
}
这样,我就可以在代码中处理自定义事件。
相关文章:
- 如何解决:自定义QGraphics项目接收鼠标新闻事件坐标延迟/滞后?
- 在UE4中,玩家进行光线投射、击中物体并触发自定义事件C++
- 如何在Maya中选择自定义网格组件后立即发布用户事件
- 处理自定义QT小部件中的输入事件
- 是否有任何可能的方法将事件(自定义)附加到在运行时创建的对象?[C 构建器]
- FireMonkey自定义控制点击事件在设计师中发射
- WXTREECTRL自定义事件
- 继承自定义选项卡栏和调整大小事件的实现
- 不能在绘画中使用 QPainter 自定义 QWidget 的事件 (Qt5)
- wxwidgets 自定义事件不会传播到父窗口
- 在 C++ 中编写自定义事件类
- Qt 中的自定义事件
- Q读取自定义事件
- Qt-如何在不使用插槽的情况下检测自定义事件循环中的关闭窗口
- Visual Studio自定义生成事件始终在执行
- Kurento自定义插件:如何将事件异步发送到java服务器
- 子类化 QGraphicsView,自定义鼠标事件
- Qt - 拖放 - 自定义图形场景 - 事件错误
- Qt:如何使用connect处理自定义事件
- 在 Eclipse RCP 中处理自定义设备事件