WorldWind系列三

简单功能分析——主窗体的键盘监听处理及拷贝和粘贴位置坐标功能

在分析功能时发现,各功能都有自己的快捷键相应,比如今天要分析的 Copy Coordinates (Ctrl+C)和Paste Coordinates (Ctrl+P),以及主窗体的全屏功能也是通过快捷键(Alt+Enter)。这就使我需要彻底分析一下主窗体的键盘监听处理啦。

主窗体的键盘监听处理

与WorldWind系列三:功能分析——截屏功能和“关于”窗体分析 中AboutDialog.cs分析类似,WorldWind主窗体也是重载了OnKeyUp,使窗体接受键盘响应。

936行

protected override void OnKeyUp(KeyEventArgs e)
         {
             if (this.webBrowserPanel.IsTyping()) //如果是在“网页窗体”(稍后介绍)里输入地址,则主窗体处不相应键盘事件,将 e.Handled = true;表示已经处理事件啦。
                 e.Handled = true;
             else e.Handled = HandleKeyUp(e);  //此处HandleKeyUp()是真正处理主窗口的键盘响应

             base.OnKeyUp(e);
         }

HandleKeyUp函数

真正处理键盘响应函数

/// <summary>
         /// Handles key up events.
         /// </summary>
         /// <param name="e"></param>
         /// <returns>Returns true if the key is handled.</returns>
         protected bool HandleKeyUp(KeyEventArgs e)
         {
             // keep keypresses inside browser url bar
             if(e.Handled)
                 return true;
             if (e.Alt)  //处理Alt 组合键
             {
                 // Alt key down
                 switch(e.KeyCode)
                 {
                     case Keys.A:
                         menuItemAlwaysOnTop_Click(this,e);
                         return true;
                     case Keys.Q:
                         using( PropertyBrowserForm worldWindSettings = new PropertyBrowserForm( Settings, "World Wind Settings" ) )
                         {
                             worldWindSettings.Icon = this.Icon;
                             worldWindSettings.ShowDialog();
                         }
                         return true;
                     case Keys.W:
                         menuItemOptions_Click(this, EventArgs.Empty);
                         return true;
                     case Keys.Enter: // 实现全屏功能,稍后看看如何实现??
                         this.FullScreen = !this.FullScreen;
                         return true;
                     case Keys.F4:
                         Close();
                         return true;
                 }
             }
             else if (e.Control)   //处理Ctrl组合键
             {
                 // Control key down
                 switch(e.KeyCode)
                 {
                     case Keys.C:
                     case Keys.Insert:  //调用拷贝坐标功能,即Copy Coordinates (Ctrl+C)
                         menuItemCoordsToClipboard_Click(this, e);
                         return true;
                     case Keys.F:
                         return true;
                     case Keys.H:
                         if (progressMonitor != null)
                         {
                             bool wasVisible = progressMonitor.Visible;
                             progressMonitor.Close();
                             progressMonitor.Dispose();
                             progressMonitor = null;
                             if (wasVisible)
                                 return true;
                         }
                         progressMonitor = new ProgressMonitor();
                         progressMonitor.Icon = this.Icon;
                         progressMonitor.Show();
                         return true;
                     case Keys.I:
                         menuItemConfigWizard_Click(this,e);
                         return true;
                     case Keys.N:
                         menuItemOptions_Click(this,e);
                         return true;
                     case Keys.T: //控制工具栏的显示。
                         menuItemShowToolbar_Click(this,e);
                         return true;
                     case Keys.V: //粘贴坐标,并转向粘贴的坐标位置。今天分析
                         menuItemEditPaste_Click(this,e);
                         return true;
                     case Keys.S: //保存截屏,已经分析
                         menuItemSaveScreenShot_Click(this, e);
                         return true;
                 }
             }
             else if (e.Shift)
             {
                 // Shift key down
                 switch(e.KeyCode)
                 {
                     case Keys.Insert:
                         menuItemEditPaste_Click(this,e);
                         return true;
                     case Keys.S:
                         menuItemSunShading_Click(this, e);
                         return true;
                     case Keys.A:
                         menuItemAtmosphericScattering_Click(this, e);
                         return true;
                 }
             }
             else
             {
                 // Other or no modifier key
                 switch(e.KeyCode)
                 {
                     //case Keys.B:
                     //    menuItemWMS_Click(this, e);
                     //    return true;
                     case Keys.G:
                         return true;
                     case Keys.L:
                         menuItemLayerManager_Click(this, e);
                         return true;
                     case Keys.P:
                         if(this.pathMaker == null)
                         {
                             this.pathMaker = new PathMaker(this.worldWindow);
                             this.pathMaker.Icon = this.Icon;
                         }
                         this.pathMaker.Visible = !this.pathMaker.Visible;
                         return true;
                     case Keys.V:   
                         if(this.placeBuilderDialog == null)
                         {
                             this.placeBuilderDialog = new PlaceBuilder( this.worldWindow );
                             this.placeBuilderDialog.Icon = this.Icon;
                         }
                         this.placeBuilderDialog.Visible = !this.placeBuilderDialog.Visible;
                         return true;
                     case Keys.Escape:  //退出全屏快捷键 ESC
                         if (this.FullScreen)
                         {
                             this.FullScreen = false;
                             return true;
                         }
                         break;
                     case Keys.D1:
                     case Keys.NumPad1:
                         this.VerticalExaggeration = 1.0f;
                         return true;
                     case Keys.D2:
                     case Keys.NumPad2:
                         this.VerticalExaggeration = 2.0f;
                         return true;
                     case Keys.D3:
                     case Keys.NumPad3:
                         this.VerticalExaggeration = 3.0f;
                         return true;
                     case Keys.D4:
                     case Keys.NumPad4:
                         this.VerticalExaggeration = 4.0f;
                         return true;
                     case Keys.D5:
                     case Keys.NumPad5:
                         this.VerticalExaggeration = 5.0f;
                         return true;
                     case Keys.D6:
                     case Keys.NumPad6:
                         this.VerticalExaggeration = 6.0f;
                         return true;
                     case Keys.D7:
                     case Keys.NumPad7:
                         this.VerticalExaggeration = 7.0f;
                         return true;
                     case Keys.D8:
                     case Keys.NumPad8:
                         this.VerticalExaggeration = 8.0f;
                         return true;
                     case Keys.D9:
                     case Keys.NumPad9:
                         this.VerticalExaggeration = 9.0f;
                         return true;
                     case Keys.D0:
                     case Keys.NumPad0:
                         this.VerticalExaggeration = 0.0f;
                         return true;
                     case Keys.F1:
                         this.menuItemAnimatedEarth_Click(this,e);
                         return true;
                     case Keys.F2:
                         this.menuItemModisHotSpots_Click(this,e);
                         return true;
                     case Keys.F5:
                         this.menuItemRefreshCurrentView_Click(this,e);
                         return true;
                     case Keys.F6:
                         return true;
                     case Keys.F7:
                         this.menuItemShowLatLonLines_Click(this,e);
                         return true;
                     case Keys.F8:
                         this.menuItemPlanetAxis_Click(this,e);
                         return true;
                     case Keys.F9:
                         this.menuItemShowCrosshairs_Click(this,e);
                         return true;
                     case Keys.F10:
                         this.menuItemShowPosition_Click(this,e);
                         return true;
                     case Keys.F11:
                         this.menuItemConstantMotion_Click(this,e);
                         return true;
                     case Keys.F12:
                         this.menuItemPointGoTo_Click(this,e);
                         return true;
                 }
             }
             return false;
         }

时间: 2024-11-05 18:50:03

WorldWind系列三的相关文章

WorldWind系列三:简单功能分析——截屏功能和“关于”窗体分析

WorldWind.cs中截屏功能分析: private void menuItemSaveScreenShot_Click(object sender, System.EventArgs e)处理截屏的菜单命令的, 主要是弹出SaveFileDialog,设置保存格式和路径选择. this.worldWindow.SaveScreenshot(dlg.FileName); //调用WorldWindow.cs中的 SaveScreenshot()方法,实现设置截图的保存完整路径this.sav

iOS开发UINavigation系列三——工具栏UIToolBar

iOS开发UINavigation系列三--工具栏UIToolBar         iOS中除了UINavinationBar之外,还有工具栏UIToolBar可以供我们使用,工具栏和导航栏十分类似,只是功能更加简单,工具栏中也有UIBarButtonItem按钮,在前两篇博客中,对导航栏和导航项都进行的讨论,地址如下: UINavigationBar:http://my.oschina.net/u/2340880/blog/527706 UINavigationItem:http://my.

走近Flex组件系列(三):按扭组件

走近Flex组件系列(三):按扭组件(Button,CheckBox,LinkBar,LinkButton,PopUpButton,RadioButton,ToggleButtonBar) 本文主要介绍Flex的Button.ButtonBar.CheckBox.LinkBar.LinkButton.PopUpButton.RadioButton.RadioButtonGroup和ToggleButtonBar组件,这些组件是非常基础的组件,如果你是学习过Flex组件的可以飘过,本文主要是针对F

WorldWind系列二:擒贼先擒王篇1

有了WorldWind系列一的基础,我们已经可以进行正常调试运行啦!可以先操作看看软件的功能吧,这样我们才可以知道WorldWind有哪些功能等待我们学习的. 开始我们的"WorldWind系列二:擒贼先擒王"分析WorldWind主窗体,从Main函数入口一步步解析学习.至少对于我来说,里面有很多知识要学的.(补充一下:无法进入WorldWind.cs窗体的设计界面,这个问题我早就发现了,但没解决,我们根据功能直接看代码吧) 1.使用System.Version在内部,读取软件版本信

iOS流布局UICollectionView系列三——使用FlowLayout进行更灵活布局

iOS流布局UICollectionView系列三--使用FlowLayout进行更灵活布局 一.引言         前面的博客介绍了UICollectionView的相关方法和其协议中的方法,但对布局的管理类UICollectionViewFlowLayout没有着重探讨,这篇博客介绍关于布局的相关设置和属性方法. UICollectionView的简单使用:http://my.oschina.net/u/2340880/blog/522613    UICollectionView相关协议

系列三VisualSvn Server

原文:系列三VisualSvn Server VisualSvn Server介绍 1 .VisualSvn Server  VisualSvn Server是免费的,而VisualSvn是收费的.VisualSvn是Svn的客户端,和Visual Studio集成在一起,但是不免费,使用AnkhSvn(VS2008插件)来代替VisualSvn.使用 VisualSvn Server是Svn的服务器端,包括Subversion.Apache和用户及权限管理,优点在上面已经说过了. 2. Vis

使用OpenGL开发Android应用详解系列三

注:近三篇转载中的视锥体部分结合着来看,再参照老罗的3d变换,基本可以初步理解和完成相关视锥体调整. 使用OpenGL开发Android应用详解系列三 [原创]转载请注明出处 我一家网 http://www.5yijia.com 前面两节主要介绍了一下OpenGL的基本概念,以及在Android开发中引入OpenGL时,Android项目的基本构成情况.这一节开始,我们通过具体的实例,来进行简单3D图形的描画. 注:代码基础还是采用上一节: 使用OpenGL开发Android应用详解系列二中使用

VSTO之旅系列(三):自定义Excel UI

原文:VSTO之旅系列(三):自定义Excel UI 本专题概要 引言 自定义任务窗体(Task Pane) 自定义选项卡,即Ribbon 自定义上下文菜单 小结   引言 在上一个专题中为大家介绍如何创建Excel的解决方案,相信大家通过从上面一个专题之后了解了Excel的对象模型,以及Office两种解决方案的,看完上一个专题之后,肯定很多朋友想为Excel自定义属于自己的UI界面,例如,有这样的一些疑问--是否可以使用VSTO来自定义选项卡呢? 是否可以自定义上下文菜单的呢?如果你也有这些

iOS中CoreData数据管理系列三——添加与查询数据

iOS中CoreData数据管理系列三--添加与查询数据 一.引言     在前两篇博客中,分别介绍了iOS中CoreData框架创建数据模型和CoreData框架中的三个核心类.博客地址如下: iOS中CoreData框架简介:http://my.oschina.net/u/2340880/blog/610488. CoreData框架中三个核心的类:http://my.oschina.net/u/2340880/blog/610948. 本篇博客将综合使用三个核心的类,进行数据创建和查询的操