无痕客

落花无情,流水无痕……

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

posted on 2009-12-11 09:05  无痕客  阅读(4822)  评论(11编辑  收藏  举报