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( 0 0 , 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);
 }

你可能感兴趣的:(学习)