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