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


     WorldWind.cs中截屏功能分析:

     

      private void menuItemSaveScreenShot_Click(object sender, System.EventArgs e)处理截屏的菜单命令的,

      主要是弹出SaveFileDialog,设置保存格式和路径选择。

      this.worldWindow.SaveScreenshot(dlg.FileName);//调用WorldWindow.cs中的SaveScreenshot()方法,实现设置截图的保存完整路径this.saveScreenShotFilePath = filePath;这里并没有实现截图。

       WorldWindow.cs真正的截屏功能实现是重载的OnPaint(PaintEventArgs e)方法调用的Render(),Render()里面调用SaveScreenShot()方法。

          if (saveScreenShotFilePath != null)
              SaveScreenShot();

    截屏输出代码
    protected void SaveScreenShot()
    {
     
    try
     {
     
    using( Surface backbuffer = m_Device3d.GetBackBuffer(00, BackBufferType.Mono) )
     SurfaceLoader.Save(saveScreenShotFilePath, saveScreenShotImageFileFormat, backbuffer);
     saveScreenShotFilePath 
    = null;
     }
     
    catch(InvalidCallException caught)
     {
    MessageBox.Show(caught.Message, 
    "Screenshot save failed.", MessageBoxButtons.OK, MessageBoxIcon.Error );
     }
    }

    实现关键:

    WorldWindow.cs中添加

    using Microsoft.DirectX.Direct3D;
    using Microsoft.DirectX;

    这里的调用了Direct3D的Device类(实例:m_Device3d)的GetBackBuffer方法,调用Direct3D命名空间的SurfaceLoader.Save静态方法保存截图。

    该截屏方式大家可以学习借鉴一下。

    “关于窗体”:AboutDialog.cs分析


    1、 从文件中加载图片
    this.pictureBox.Image = Splash.GetStartupImage();
      public static Image GetStartupImage()
      {
       return Image.FromFile(Path.GetDirectoryName(Application.ExecutablePath) + "\\Data\\Icons\\Interface\\splash.png");
      }
    2.获取弹出窗体的父窗体,然后可以调用父窗体的属性和方法。

      private void pictureBox_Click(object sender, System.EventArgs e)
      {
                MainApplication mainApp 
    = (MainApplication)this.Owner;   //获取弹出窗体的父窗体
                string URL = MainApplication.WebsiteUrl;
                
                mainApp.BrowseTo(URL);  
    //调用父窗体的方法
       
    //MainApplication.BrowseTo( MainApplication.WebsiteUrl );
      }

    3.通过进程跳转到网页地址,不是简单的调用IE执行网页地址,优点:防止客户计算机中没有使用IE浏览器

    打开网址的方式
     public void BrowseTo(string url)
     {
     ProcessStartInfo psi 
    = new ProcessStartInfo();
     psi.FileName 
    = url;
     psi.Verb 
    = "open";
     psi.UseShellExecute 
    = true;

     psi.CreateNoWindow 
    = true;
     Process.Start(psi);

     }

    简单地使用IE打开网络地址:Process.Start("iexplore.exe","http://www.163.com");
     4.重载了Form窗体的KeyEvent事件的处理函数OnKeyUp,使窗体接受键盘响应。
     protected override void OnKeyUp(System.Windows.Forms.KeyEventArgs e)
     {
      switch(e.KeyCode)
      {
      case Keys.Escape:
      Close();
      e.Handled = true;
      break;
      case Keys.F4:
      if(e.Modifiers==Keys.Control)    //Modifiers是KeyUp或KeyDown的修饰标志,这标志指示按下的是Ctrl、Alt 和 shift的组合键
      {
       Close();
       e.Handled = true;     //表示事件已响应
      }
      break;
      }

      base.OnKeyUp(e);
     }

  • 相关阅读:
    ES6, CommonJS, AMD, CMD,UMD模块化规范介绍及使用
    前端项目开发框架选型需考虑的4个方面
    初识webSocket及其使用
    动态组件 —— 2种方式实现动态组件的切换
    mac下anaconda安装新包
    新版docker设置国内镜像
    记一次解决Original error: UiAutomator quit before it successfully launched
    linux clion cmakelisits undefined reference 未定义引用
    苹果设备插入PC不能识别问题解决办法
    用Cucumber理解BDD行为驱动开发
  • 原文地址:https://www.cnblogs.com/wuhenke/p/1621459.html
Copyright © 2020-2023  润新知