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

it2024-11-02  20

 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); }

转载于:https://www.cnblogs.com/wuhenke/archive/2009/12/11/1621459.html

最新回复(0)