通过实现flashPlayer activeX的消息钩子可以很轻松的屏蔽掉flex的系统右键菜单, 从而实现自己的右键菜单。当然这个消息钩子也会监听到键盘消息,从而你可以很轻松 的实现自己的键盘事件。 代码如下:
- //将flash控件添加到窗体
- this .flashContainer= new FlashContainer( this );
- //添加消息钩子
- this .flashContainer.addHookInterceptor( new OleHookInterceptor(){
- /**如果此方法返回false表示不过滤此消息。返回true表示消息被过滤掉了,那么
- *flashPlayer就接收不到相应的消息事件,也就实现了屏蔽系统右键菜单与自定义
- *键盘事件的目的
- */
- public boolean intercept(Msg message, int code, int wParam,
- int lParam) {
- int msg=message.getMessage();
- if (msg== Win32Constant.WM_RBUTTONDOWN) { //系统右键消息
- Point cursor = flashContainer.getParent().toControl(
- Display.getCurrent().getCursorLocation());
- //如果当前鼠标在flashPlayer窗口中
- if (flashContainer.getBounds().contains(cursor) && flashContainer.isVisible()) {
- //显示一消息对话框
- MessageBox messageBox = new MessageBox(flashContainer
- .getShell());
- messageBox.setMessage("您单机了右键" );
- messageBox.open();
- return true ; //返回true就屏蔽了flashPlayer的系统右键
- }
- }
- if (msg==Win32Constant.WM_KEYDOWN){ //键盘按键按下事件
- System.out.println("按下" +( char )message.getWParam());
- }
- //以下的代码可以捕获到键盘组合键
- if ((OS.GetKeyState(Win32Constant.VK_CONTROL)< 0 )&&(OS.GetKeyState(Win32Constant.VK_DELETE)< 0 )&&(message.getWParam() == 'Z' )){
- System.out.println("control DELETE and Z..........." );
- }
- return false ;
- }
- });