Welcome![Sign In][Sign Up]
Location:
Search - catch

Search list

[OS programcatch

Description: 抓包控件, 抓包控件,抓包控件。
Platform: | Size: 47260 | Author: 雁行高天 | Hits:

[Other resourcefsm

Description: 检测输入数据中的“10110”序列,并记录检测到的序列的数目,当序列数目大于15时溢出。 输入信号:iclk //输入时钟 rst_ //复位信号 din //输入串行数据 输出信号:[3:0] catch //检测到的序列的数目 overflow //数目大于15 ,溢出
Platform: | Size: 6289 | Author: Eric | Hits:

[Other resourceAW16_CATCH

Description: mc9s08aw16 CATCH例子程序实例
Platform: | Size: 97517 | Author: 李大鹏 | Hits:

[OS programCATCH

Description: 这款抓包程序可以帮助您清楚的看到网络数据包,以及截获数据包的过程
Platform: | Size: 20548 | Author: 张程 | Hits:

[Multimedia programCapture

Description: Catch Screen shot with hot key
Platform: | Size: 18679 | Author: 毒蘋果 | Hits:

[Linux-Unixprocessmanager

Description: 一个linux进程管理器,具有以下功能: 管理系统的进程, 包括系统中进程的ID,owner ID, effective user ID、 进程之间的关系、各个进程占用的内存大小、进程的状态; 列出各个进程使用的文件描述符,以及它们打开的文件; 列出各个进程当前的信号使用情况, 包括各个阻塞的信号,各个信号的处理(如采用的哪一种处理方式,如采用了Catch function,给出Catch Function的地址或名称); 能对某一进程进行挂起、暂停、终止等操作。统计各个进程的运行时间, 包括system time,user time 与clock(即从开始至终止时间)。 给出各个进程对应的可执行文件名,owner名称,effective名称。 采用图形化界面。 实时统计系统cpu和内存状况
Platform: | Size: 383574 | Author: 赵峰 | Hits:

[Video Capturechap2

Description: A video frequency catch program based C++.The program could successful run by visual C
Platform: | Size: 21182 | Author: fanming | Hits:

[JSP/Javajava3

Description: 实验12 异常处理 12.1 实验目的 (1)掌握异常处理的编程特点。 (2)了解Java异常分类层次,常见系统异常。 (3)了解自定义异常的定义及方法异常的抛出与处理。 12.2 知识要点 Java把异常加入Java语言的体系结构,为异常定义了类和关键字,简化了错误处理代码。将错误处理从正常的控制流中分离出来,对错误实施统一处理。 12.2.1异常处理结构 try { 语句块; } catch (异常类名1 参变量名) { 语句块; } catch (异常类名2 参变量名) { 语句块; } finally { 语句块; } 说明: (1)finally总是执行,它是异常处理的统一出口,常用来实现资源释放,文件关闭等。 (2)发生异常时try块内的后续语句不再执行; (3)catch按照次序进行匹配检查处理,找到一个匹配者,不再找其它;catch的排列要按照先个别化再一般化的次序。不能将父类异常排在前、子类异常排在后。 12.2.2 常见系统异常 常见系统异常如表12-1所示。 表12-1 常见系统异常
Platform: | Size: 93274 | Author: wangli | Hits:

[Other resourceAsprise-OCR-CSharp-Windows_Server_32bit-4.0

Description: 识别图片上的文字,识别率有80% 附加c#调用 [DllImport(\"AspriseOCR.dll\")] static extern string craboOCR(string file, int type) private void GetVeryfyCode() { if(File.Exists(_imgPath))//ok now? { try { this.picbVeryfyCode.Image=System.Drawing.Bitmap.FromFile(_imgPath) _veryfyCode=craboOCR(_imgPath,-1) _veryfyCode=_veryfyCode.Substring(0,4) this.txtVeryfyCode.Text=_veryfyCode } catch(Exception e) { this.lblResult.Text+=e.Message } } }
Platform: | Size: 6479709 | Author: 似的 | Hits:

[Linux-Unixcatch

Description: 自己编的linux下的网络监控程序源码,可以监视局域网上的数据包。-own series under linux network monitoring program source code, can monitor LAN data packets.
Platform: | Size: 2997 | Author: 田克 | Hits:

[Other resourcecatchallerrors

Description: a class to help you catch all throwable errors in Java
Platform: | Size: 1074 | Author: tommy | Hits:

[Windows Developenumser-Desktop

Description: this is desktop catch for wince
Platform: | Size: 21387 | Author: peter | Hits:

[GUI Develop超级玛莉追赶鼠标源代码

Description: 超级玛莉追赶鼠标源代码,这个对游戏开发可能有点作用!-Super Mario Bros. source code to catch up with the mouse, and this game may be a bit role.
Platform: | Size: 54118 | Author: tb | Hits:

[Othergedebahe

Description: public class gedebahe { public static void main( String [] args) { for ( ) { int a=-1,b,c //b,c是分解出来的两个数 System.out.print(\"Please input a oushu:\") //输入一个偶数 try { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)) String inputLine = in.readLine() a = Integer.valueOf(inputLine).intValue() }catch (Exception exc) { System.out.println(\"Sorry,please input a number.\") return } if (a%2!=0) { System.out.println(\"Sorry,please input a oushu.\") return } for (b=1 b<a b++) { c=(a-b) if(isPrime(b)&&isPrime(c)) { System.out.println(a+\"=\"+b+\"+\"+c) break } } } } public static boolean isPrime(int k)//方法用来判断一个数是否为偶数 { int a boolean t = true if (k==1) return t for (a=2 a<k a++) { if (k%a==0) break } if (a!=k) t=false return t-gedebahe public class (public static void main (String [] args) (for () (int a = a, b, c / / b, c is the decomposition of the two several System.out.print ( "Please input a oushu : ") / / input an even try (BufferedReader in = new BufferedReader (new InputStreamReader (System.in)) = String inputLine in.readLine () a = Integer.valueOf (inputLine). intValue ()) catch (Exception exc) ( System.out.println ( "Sorry, please input a number.") return) if (a 2%! = 0) (System.out.println ( "Sorry, please input a oushu.") return) for (b = a blt; a b) (c = (a-b) if (isPrime (b) isPrime (c)) (System.out.println (a "=" b "" c) break)))) public static boolean isPrime (int k) / / method used to determine whether a number is even (int a boolean true if t =
Platform: | Size: 881 | Author: 康健伟 | Hits:

[OtherSniffer_1

Description: 一个简单捕获本地TCP数据包程序源码。 适合于初学者。-a simple catch local TCP packet procedure source. Suitable for beginners.
Platform: | Size: 11557 | Author: fef | Hits:

[Menu control0528

Description: 一款不错的网站管理系统,美工不错!界面简洁大方,韩式风格! 捕侠网站管理系统 http://www.buxia.com/about http://www.buxia.com/0528.rar-one good site management system, good artists! Interface tables, folk style! Catch-xia website management system http://www.buxia.com/about http://www.buxia.com/0528.rar
Platform: | Size: 1633560 | Author: jason | Hits:

[Windows Develop捕捉屏幕图像

Description: 可以把屏幕内容捕捉下来,用在制作墙纸方面 ,相当于print screen键-This program can be used to catch the screen image, which can be used as wall paper. This function equals to \"print screen\" key.
Platform: | Size: 46704 | Author: 郑强 | Hits:

[WinSock-NDIS2003061814184025718

Description: 一个捕获ip数据包的delhpi程序,涉及到delhpi网络编程。-a catch ip packet delhpi procedures involving delhpi network programming.
Platform: | Size: 240825 | Author: 丁鹏 | Hits:

[.NET/ASPX亮剑Net-深入体验与实战精要

Description: 目录 第一篇 技术基础总结 第1章 .NET,你真的知道了吗 1.1 搞清自己是干什么的 1.2 .NET的几个特性 1.3 万丈高楼平地起:面试者必会 1.3.1 C#介绍 1.3.2 命名空间 1.3.3 C#语法格式要点 1.3.4 变量 1.3.5 类型推断 1.3.6 变量的作用域 1.3.7 常量 1.3.8 流程控制 1.3.9 字符串常见操作 1.3.10 几个常用的数学函数 1.4 .NET的面向对象之门 1.4.1 继承——“子承父业” 1.4.2 委托——“任务书” 1.4.3 事件——“年终分红” 1.4.4 反射——“解剖” 1.5 .NET开发几把小刀 1.5.1 using之多变身 1.5.2 @符号的妙用 1.5.3 预处理指令,有你更轻松 1.6 Visual Studio.NET 2008 实战 1.6.1 如何创建ASP.NET项目 1.6.2 如何创建Windows项目 1.6.3 Visual Studio.NET 2008操作与使用技巧 1.6.4 常见开发调试技巧 1.6.5 错误异常处理方法 本章常见技术面试题 常见面试技巧之面试前的准备 本章小结 第2章 细节决定成败 2.1 Equals()和运算符==的区别 2.2 const和readonly的区别 2.3 private、protected、public和internal的区别 2.4 sealed、new、virtual、abstract与override 2.5 abstract class与interface 2.6 公共变量与属性的区别 2.7 参数修饰符params、out和ref的区别 2.8 值类型和引用类型的区别 2.9 结构与类的区别 2.10 Dispose()和Close()、Finalize()的区别 2.11 string和StringBuilder有什么区别 2.12 Debug版本和Release版本的区别 本章常见技术面试题 常见面试技巧之细节决定成败 本章小结 第3章 ASP.NET开发大杂烩 3.1 页面生命周期 3.1.1 独立页面生命周期事件顺序 3.1.2 具有Master页的生命周期事件顺序 3.1.3 ASP.NET生命周期详解 3.2 页面状态管理 3.2.1 Cookie 3.2.2 HtmlInputHidden隐藏域 3.2.3 ViewState 3.2.4 查询字符串Request 3.2.5 Aplication对象 3.2.6 Session对象 3.2.7 示例项目:在线用户列表统计 3.3 服务器和客户端数据交互 3.3.1 页面数据绑定全攻略 3.3.2 Bind和Eval的区别 3.4 ASP.NET编程中的技巧 3.4.1 页面之间传值的7种方法 3.4.2 get与post方法的区别 3.4.3 ASP.NET服务器控件和HTML控件的区别 3.4.4 Server.Transfer和Response.Redirect的区别 3.4.5 刷新页面的方法汇总 3.4.6 页面事件控制 3.4.7 在URL中传递中文的解决方案 3.4.8 增强用户体验的一些技巧 3.4.9 XHTML与HTML的区别 3.5 打造自己的页面基类PageBase 本章常见技术面试题 常见面试技巧之如何做好自我介绍 本章小结 第4章 Windows窗体编程你也行 4.1 创建简单的WinForm项目 4.2 创建MDI窗体应用 4.3 获取应用程序路径信息 4.4 回车跳转控件焦点 4.5 窗体间传递复杂数据 4.5.1 构造传递 4.5.2 公有字段传递 4.5.3 委托与事件传递 4.6 实现个性化窗体界面 4.7 无标题窗体拖动的两种方法 4.8 让程序只启动一次——单实例运行 4.9 实现系统托盘和热键呼出 4.10 进程与多线程的区别 4.11 创建多线程应用程序 4.12 WinForm开发常见问题 4.12.1 如何设置运行时窗体的起始位置 4.12.2 如何使一个窗体在屏幕的最顶端 4.12.3 实现窗体渐显效果 4.12.4 设置窗口背景为渐变色 4.12.5 模态窗口和非模态窗口 4.12.6 屏蔽窗口右上角的关闭操作 4.12.7 调用执行外部的程序 本章常见技术面试题 常见面试技巧之经典问题巧回答 本章小结 第5章 数据库开发 5.1 ADO.NET与抽水的故事 5.1.1 ADO.NET的定义 5.1.2 趣味理解ADO.NET对象模型 5.1.3 进水笼头——建立Connection 5.1.4 抽水机——Command 5.1.5 输水管——DataAdapter 5.1.6 输水管——DataReader 5.1.7 随用随关,释放资源 5.1.8 水库管理——DataSet 5.1.9 水池子——DataTable 5.2 数据库操作类的封装详解 5.2.1 执行命令方法的封装 5.2.2 查询数据方法的封装 5.2.3 数据统计方法的封装 5.2.4 实现SqlParameter方式 5.2.5 实现多数据库的访问 5.3 常用经典SQL语句 5.4 事务处理 5.4.1 SQL和存储过程级别的事务 5.4.2 ADO.NET级别的事务 5.4.3 ASP.NET页面级别的事务 5.4.4 企业级服务COM+事务 5.4.5 System.Transactions 事务处理 5.5 Oracle开发常见问题 5.5.1 Oracle和SQL Server的常用函数对比 5.5.2 Oracle和SQL Server的语句区别 5.5.3 ASP.NET连接Oracle失败的解决方法 本章常见技术面试题 常见面试技巧之经典问题巧回答 本章小结 第6章 关于XML 6.1 XML概述 6.1.1 XML和HTML有什么区别 6.1.2 XML的优势 6.2 文档结构与基本语法 6.3 XML操作 6.3.1 XmlDocument创建XML文档 6.3.2 XmlTextWriter创建XML文档 6.3.3 XmlDocument读取XML文档 6.3.4 XmlTextReader读取XML文档 6.3.5 在HTML中显示XML中的数据 6.3.6 JavaScript获取XML内容 6.3.7 项目案例:通用自定义XML配置类 6.4 ADO.NET与XML 6.4.1 读XML文档到DataSet 6.4.2 DataSet转为XML文档 6.5 项目案例1:实现网站的RSS应用 6.6 项目案例2:在线实现RSS阅读器 本章常见技术面试题 常见面试技巧之经典问题巧回答 本章小结 第7章 Web Service开发详解 7.1 Web Service基本概念 7.2 Web Service的应用场景 7.3 创建简单的Web Service项目应用 7.4 Web Service属性介绍 7.5 ASP.NET如何调用Web Service 7.6 JavaScript如何调用Web Service 7.6.1 通过webbehavior.htc调用Web Service 7.6.2 通过Microsoft.XMLDOM调用Web Service 7.6.3 XMLHTTP POST调用Web Service 7.6.4 SOAP调用Web Service 7.7 WinForm如何调用Web Service 7.7.1 .NET的WinForm调用Web Service 7.7.2 手动发送HTTP请求调用Web Service 7.8 实现异步调用Web Service 7.9 如何保证Web Service的安全 7.9.1 通过SoapHeader来增强Web Service的安全性 7.9.2 采用SSL实现加密传输 7.9.3 访问IP限制 7.10 Web Service开发中需要注意的 问题 本章常见技术面试题 常见面试技巧之经典问题巧回答 本章小结 第8章 用户体验的杀手锏——Ajax 8.1 Ajax概述 8.1.1 什么是Ajax 8.1.2 Ajax技术的核心 8.1.3 Ajax的工作原理 8.1.4 Ajax的优点 8.1.5 Ajax的问题 8.1.6 Ajax适用场景 8.1.7 Ajax不适用场景 8.1.8 XMLHttpRequest开发实例 8.2 微软VS.NET的Ajax开发 8.2.1 安装ASP.NET 2.0 Ajax Extensions 8.2.2 创建ASP.NET Ajax应用程序 8.2.3 ScriptManager控件使用技巧 8.2.4 UpdaetPanel控件使用技巧 8.2.5 AsyncPostBackTrigger实现外部控件引发局部刷新 8.2.6 Ajax错误处理 8.2.7 告诉用户你正在做什么——UpdateProgress控件 8.2.8 ASP.NET AjaxControToolKit简介 8.3 使用第三方组件 Ajax.dll 开发 8.4 使用第三方组件AjaxPro的开发 8.5 使用第三方组件MagicAjax的开发 8.6 Ajax开发原则 本章常见技术面试题 常见面试技巧之经典问题巧回答 本章小结 第9章 系统与文件操作 9.1 获取系统信息 9.1.1 用SystemInformation类获取系统信息 9.1.2 用Environment 类获取系统信息 9.1.3 通过WMI获取系统信息 9.1.4 用RegistryKey 类读取系统信息 9.1.5 用API函数获取系统信息 9.1.6 获取系统服务信息 9.2 文件操作 9.2.1 StreamWriter类实现写文件 9.2.2 通过File类创建文件 9.2.3 通过FileStream类创建文件 9.2.4 通过FileInfo类创建文件 9.2.5 追加文本 9.2.6 读取文本文件 9.2.7 读写二进制文件 9.2.8 文件复制、移动、删除 9.3 文件夹目录操作 9.4 读写INI文件 9.5 读写注册表 本章常见技术面试题 常见面试技巧之经典问题巧回答 本章小结 第10章 网络应用开发 10.1 Socket基本编程 10.1.1 Socket基本知识 10.1.2 Socket服务端开发步骤 10.1.3 Socket客户端开发步骤 10.2 异步Socket通信——实现MSN机器人 10.2.1 机器人服务端 10.2.2 客户端实现步骤 10.3 基于TCP协议的客户端和服务端 10.3.1 TcpListener 实现网络服务端 10.3.2 TcpClient实现网络客户端 本章常见技术面试题 常见面试技巧之经典问题巧回答 本章小结 第11章 Windows Service开发 11.1 什么是Windows服务 11.2 创建Windows服务 11.3 Windows服务开发常见问题 11.4 安装/卸载Windows服务 11.4.1 安装Windows服务 11.4.2 卸载Windows服务 11.4.3 Windows服务应用程序体系结构 11.5 调试Windows服务 11.5.1 日志调试法 11.5.2 附加进程断点调试法 本章常见技术面试题 职场智慧之初入江湖 本章小结 第12章 新技术初探 12.1 WPF 421 12.1.1 WPF简介 421 12.1.2 WPF何以令人佩服 422 12.1.3 XAML概述 422 12.1.4 WPF开发环境配置 423 12.1.5 项目示例:开发一个简单的WPF应用程序 424 12.2 WCF 427 12.2.1 SOA是什么 427 12.2.2 WCF是什么 428 12.2.3 WCF的优势是什么 428 12.2.4 WCF开发环境 431 12.2.5 项目示例:订票服务WCF开发步骤 431 12.3 LINQ 440 12.3.1 LINQ的架构 441 12.3.2 传统的查询 441 12.3.3 LINQ查询实例 444 12.3.4 LINQ查询语法 448 本章常见技术面试题 449 职场智慧之学习方法 449 本章小结 450 第二篇 系统架构设计思想 第13章 面向对象思想 13.1 为什么要面向对象 454 13.2 什么是面向对象 456 13.3 面向对象的特点 458 13.3.1 封装 459 13.3.2 继承 459 13.3.3 多态 460 13.4 面向对象设计和开发实例 466 13.4.1 传统过程化设计实现播放器功能 466 13.4.2 基于面向对象设计实现播放器功能 467 13.4.3 面向对象封装、继承、多态的应用 468 13.4.4 设计模式、条件外置及反射技术的应用 471 13.5 面向对象分析(OOA)的方法 475 13.6 面向对象设计的原则 478 13.6.1 优先使用(对象)组合,而非(类)继承 478 13.6.2 针对接口编程,而非(接口的)实现 481 13.6.3 开放-封闭法则(OCP) 482 13.6.4 Liskov替换法则(LSP) 485 13.6.5 单一职责原则(SRP) 486 13.6.6 依赖倒置原则(DIP) 486 13.6.7 接口分离原则(ISP) 489 13.6.8 面向对象设计时需要注意的问题 490 本章常见技术面试题 491 本章小结 491 第14章 三层架构项目开发 14.1 什么是三层架构 494 14.1.1 常用的三层架构设计 494 14.1.2 趣味理解:三层架构与养猪 496 14.2 为什么要用三层架构 497 14.3 三层架构项目开发示例 500 14.3.1 数据库设计 500 14.3.2 创建整体解决方案 501 14.3.3 业务实体Model的实现 502 14.3.4 数据访问层的实现 504 14.3.5 业务逻辑层的实现 509 14.3.6 表示层的实现 510 14.4 实现基于工厂模式的三层架构 512 14.4.1 扩展新增数据访问层 512 14.4.2 IDAL抽象接口的实现 513 14.4.3 创建DAL对象的封装 517 14.4.4 实现抽象工厂模式 519 14.4.5 工厂模式的三层架构图 521 本章常见技术面试题 522 职场智慧之程序员的职业规划 523 本章小结 524 第15章 大型网站的性能优化与安全 15.1 高效C#编码优化 526 15.2 页面(HTML)优化的方法 534 15.3 ASP.NET开发性能优化 540 15.3.1 如没必要,尽量使用静态HTML页面 540 15.3.2 避免不必要的回送操作 541 15.3.3 尽量在客户端进行用户输入验证 541 15.3.4 关闭不必要的Session状态 542 15.3.5 优先使用HTML控件,而非服务器控件 542 15.3.6 不必要时关闭ViewState 542 15.3.7 禁用调试模式 543 15.4 系统缓存管理 543 15.4.1 缓存的分类 544 15.4.2 传统缓存方式 545 15.4.3 页面输出缓存 545 15.4.4 页面输出缓存API 548 15.4.5 页面局部缓存 549 15.4.6 应用程序数据缓存 554 15.4.7 文件缓存依赖 555 15.4.8 数据库缓存依赖 557 15.4.9 Memcached——分布式缓存系统 560 15.4.10 Cacheman——.NET架构下的分布式缓存项目 561 15.5 数据库访问性能优化 562 15.5.1 选择合适的.NET数据供应器 563 15.5.2 及时地关闭数据库连接 563 15.5.3 跟踪监视SQL Server当前链接池状态 564 15.5.4 善用数据库的存储过程 567 15.5.5 SqlDataRead和Dataset的选择 567 15.5.6 ExecuteNonQuery和ExecuteScalar的选择 568 15.5.7 数据的绑定DataBinder 568 15.5.8 使用DataReader的注意事项 568 15.5.9 Command对象的使用 569 15.5.10 反复地执行SQL语句用 Prepare() 569 15.5.11 分页的数据访问 570 15.5.12 SQL命令的优化 570 15.5.13 tempdb的使用技巧 572 15.5.14 使用视图代替跨库操作 572 15.5.15 尽量避免大事务操作 572 15.5.16 尽量避免使用游标 573 15.5.17 为你的表建立适当的索引 573 15.6 网站安全防护 573 15.6.1 什么是SQL注入式攻击 573 15.6.2 如何防范SQL注入式攻击 574 15.6.3 实现页面验证码 575 15.6.4 实现文件防盗链 579 15.6.5 采用HTTPS进行访问 584 15.7 IIS优化 584 15.7.1 如何监测IIS服务器并发数 584 15.7.2 采用Gzip压缩页面优化 585 15.7.3 网站应用程序池配置 588 15.8 网站架构优化策略 593 本章常见技术面试题 596 职场智慧之独善其身 596 本章小结 599 第16章 系统设计的原则和技巧 16.1 系统设计的一些原则 602 16.1.1 最适合的才是最好的 602 16.1.2 以不变应万变 603 16.1.3 可扩展性 603 16.1.4 可复用性 604 16.2 系统设计的常用方法 604 16.3 敏捷软件开发12条原则 608 16.4 系统架构师成长之路 611 本章常见技术面试题 615 职场智慧之职场政治 615 本章小结 616 第三篇 项目实战解析 第17章 权限角色管理项目解析 17.1 权限角色管理概述 620 17.2 项目概述 623 17.3 数据库设计 624 17.3.1 数据库实体关系模型 624 17.3.2 表结构设计 625 17.4 数据访问层 627 17.4.1 类设计 627 17.4.2 代码实现 629 17.5 业务逻辑层 629 17.5.1 类设计 630 17.5.2 扩展.NET Framework用户处理机制 632 17.6 接口调用与Web管理实现 638 17.6.1 Web.config配置 638 17.6.2 用户身份和权限验证 638 17.6.3 用户验证接口方式:权限验证用户控件 640 17.6.4 用户验证接口方式:页面基类 642 17.6.5 用户和角色权限的后台管理 644 职场智慧之如何提升自己在公司的价值 652 本章小结 653 第18章 单点登录系统的设计与实现 18.1 项目概述 656 18.1.1 名词定义 656 18.1.2 项目需求描述 656 18.2 业务流程设计 657 18.2.1 用户认证流程 657 18.2.2 安全验证流程 658 18.3 功能与接口设计 659 18.3.1 接*互设计 659 18.3.2 应用系统接口 660 18.3.3 认证服务器功能和接口 660 18.4 数据库设计 660 18.4.1 数据库实体关系模型 661 18.4.2 表结构设计 661 18.5 实现认证服务器 662 18.5.1 SSO解决方案 663 18.5.2 系统管理后台 664 18.5.3 用户通行证管理中心 665 18.5.4 认证服务器接口开发 673 18.6 应用系统接入接口开发 675 18.6.1 用户身份认证 675 18.6.2 接收状态同步 676 18.6.3 用户注销 678 18.6.4 更新认证服务器状态 679 18.7 接口封装及调用 679 职场智慧之晋升之道 682 本章小结 684 第19章 常用.NET开发工具介绍 19.1 源码版本管理:Visual SourceSafe 2005 686 19.1.1 安装和配置VSS 2005服务端 686 19.1.2 安装和配置VSS客户端 691 19.1.3 将项目加入VSS版本控制 692 19.1.4 客户端连接VSS 服务器获取源代码 694 19.1.5 设置VSS支持通过Internet访问 696 19.1.6 版本控制的几个概念 701 19.1.7 VSS项目权限管理 703 19.1.8 VSS数据备份 705 19.1.9 VSS 2005的使用规范 707 19.2 单元测试工具:NUnit 708 19.2.1 NUnit简介 708 19.2.2 手把手教你在.NET中应用NUnit 708 19.3 日志工具——Log4net 714 19.3.1 Log4net简介 714 19.3.2 使用步骤 717 19.3.3 单独配置文件的使用 719 19.4 代码规范检查工具:Microsoft Source Analysis for C# 721 19.5 生成文档注释工具:GhostDoc 723 19.6 反编译工具:Reflector for .NET 732 19.7 动软.NET代码生成器 733 19.8 帮助文档生成工具:Sandcastle 737 19.8.1 Sandcastle介绍 737 19.8.2 生成方式 738 19.8.3 具体生成步骤 740 本章小结 748 附录A 软件编码规范 A.1 概述 750 A.1.1 规范基本原则 750 A.1.2 术语定义 750 A.1.3 文件命名组织 750 A.2 代码外观 751 A.2.1 列宽 751 A.2.2 换行 751 A.2.3 缩进 751 A.2.4 空行 751 A.2.5 空格 752 A.2.6 括号——() 753 A.2.7 花括号——{} 753 A.3 程序注释 754 A.3.1 注释概述 754 A.3.2 文档型注释 755 A.3.3 类注释 755 A.3.4 单行注释 755 A.3.5 注释标签 756 A.4 声明 758 A.4.1 每行声明数 758 A.4.2 初始化 758 A.4.3 位置 758 A.4.4 类和接口的声明 759 A.4.5 字段的声明 759 A.5 命名规范 759 A.5.1 命名概述 759 A.5.2 大写规则 760 A.5.3 缩写 761 A.5.4 命名空间 761 A.5.5 类 762 A.5.6 接口 762 A.5.7 属性(Attribute) 763 A.5.8 枚举(Enum) 763 A.5.9 参数 763 A.5.10 方法 764 A.5.11 属性(property) 764 A.5.12 事件 765 A.5.13 常量(const) 766 A.5.14 字段 767 A.5.15 静态字段 768 A.5.16 集合 768 A.5.17 措词 768 A.6 语句 769 A.6.1 每行一个语句 769 A.6.2 复合语句 769 A.6.3 return语句 769 A.6.4 if、if-else、if else-if语句 770 A.6.5 for、foreach 语句 770 A.6.6 while语句 771 A.6.7 do-while语句 771 A.6.8 switch-case语句 771 A.6.9 try-catch语句 772 A.6.10 using块语句 772 A.6.11 goto语句 772 A.7 其他 773 A.7.1 表达式 773 A.7.2 类型转换 773 A.8 匈牙利命名法 773 A.9 控件命名规则 774 A.9.1 一般命名方法 774 A.9.2 主要控件名简写对照表 774
Platform: | Size: 7456954 | Author: jackws@tom.comjackws | Hits:

[Internet-Network用D3D模拟地月系

Description:

 

 

 

  一、建立空窗体

  新建一个工程,添加引用,并导入名称空间。

  加入一个设备对象变量:

private Microsoft.DirectX.Direct3D.Device device = null;

  添加初始化图形函数,并在这里面对设备对象进行实例化:

public void InitializeGraphics()
{
 PresentParameters presentParams = new PresentParameters();
 presentParams.Windowed = true;
 presentParams.SwapEffect = SwapEffect.Flip;
 presentParams.AutoDepthStencilFormat = DepthFormat.D16;
 presentParams.EnableAutoDepthStencil = true;
 device = new Microsoft.DirectX.Direct3D.Device(0, Microsoft.DirectX.Direct3D.DeviceType.Hardware, this,  CreateFlags.HardwareVertexProcessing, presentParams);
}

  当程序执行时,需要绘制场景,代码在这个函数里:

public void Render()

{
 // 清空设备,并准备显示下一帧。
 device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black , 1.0f, 0);
 // 设置照相机的位置
 SetupCamera();
 //开始场景
 device.BeginScene();
 if(meshLoaded)
 {
  mesh.Render(meshLoc);
 }
 device.EndScene();
 //显示设备内容。
 device.Present();
}

  设置照相机的位置:

private void SetupCamera()
{
 device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, this.Width / this.Height, 1.0f, 1000.00f);
 device.Transform.View = Matrix.LookAtLH(new Vector3(0.0f ,0.0f, 20.0f), new Vector3(0.0f,0.0f, 0.0f), new Vector3(0,1,0));
}

  现在改变主函数,调用我们写的初始化函数,并显示场景:

[STAThread]

static void Main()
{
 using (Form1 EarthForm = new Form1())
 {
  EarthForm.InitializeGraphics();
  EarthForm.Show();

  while(EarthForm.Created)
  {
   EarthForm.Render();
   Application.DoEvents();
  }
  EarthForm.Dispose();
}

  运行程序,会显示一个空的窗体。

  二、加入地球:

  在这一步里需创建一个3D网格对象,来作为要显示的地球,为此,在工程中新加入一个类Earth,此类可以包含所创建的网格对象的信息。

  加入一些相关变量,含义见注释:

public class Earth : BaseEarth
{
 private Material[] mMaterials; //保存材质
 private Texture[] mTextures; //保存纹理
 private Matrix locationOffset; //用来保存网格对象的相对位置
 private Mesh mMesh = null; //三角形网格对象
 private Device meshDevice; //需要显示在哪个设备上。
}

  在构造函数中,把Device设备拷贝到私有成员变量,这样就可以在这个类的其它方法内使用它,另外就是把位置变量进行赋值:

public Earth(ref Device device, Matrix location): base(ref device)
{
 meshDevice = device;
 locationOffset = location;
}

  下面这个函数是装入.X文件。

public bool LoadMesh(string meshfile)
{
 ExtendedMaterial[] mtrl;
 try
 {
  // 装载文件
  mMesh = Mesh.FromFile(meshfile, MeshFlags.Managed, meshDevice, out mtrl);
  // 如果有材质的话,装入它们
  if ((mtrl != null) && (mtrl.Length > 0))
  {
   mMaterials = new Material[mtrl.Length];
   mTextures = new Texture[mtrl.Length];

   // 得到材质和纹理

   for (int i = 0; i < mtrl.Length; i++)
   {
    mMaterials[i] = mtrl[i].Material3D;
    if ((mtrl[i].TextureFilename != null) && (mtrl[i].TextureFilename != string.Empty))

 

    {
     //前面得到的纹理的路径是相对路径,需要保存的是绝对路径,通过应用程序路径可以获得
     mTextures[i] = TextureLoader.FromFile(meshDevice, @"..\..\" + mtrl[i].TextureFilename);
    }
   }
  }
  return true;
 }
 catch
 {
  return false;
 }
}

  在这个方法内,使用Mesh.FromFile()这个方法,从给定的文件名中找到.X文件,并装入相关数据,一旦数据格式设置完成,可以从此文件中找到材质和贴图信息,并把它存放在数组中,并通过文件路径,得到纹理文件文件的路径,最后返回真值,如果整个过程出现错误,返回假值。

  下面这个Render()方法,是把此对象,即地球显示在设备对象上,此方法较简单,通过变形操作来得到网格对象的X,Y,Z坐标,接着设置网格对象的材质和纹理,最后,将每个材质和纹理应用到每个网格。

public void Render(Matrix worldTransform)
{
 /把位置变为世界坐标
 meshDevice.Transform.World = Matrix.Multiply(locationOffset, worldTransform);
 //绘制网格
 for (int i = 0; i < mMaterials.Length; i++)
 {
  meshDevice.Material = mMaterials[i];
  meshDevice.SetTexture(0, mTextures[i]);
  mMesh.DrawSubset(i);
 }
}

  现在回到窗体代码中,添加引用网格对象的相关变量:

private Earth mesh = null;
private Matrix meshLoc;
private bool meshLoaded = false;

  在图形初始化函数中,需要对网格对象进行初始化。加入下面的代码:

meshLoc = Matrix.Identity;
meshLoc.M41 = 2.0f;
mesh = new Earth(ref device, meshLoc);
if (mesh.LoadMesh(@"..\..\earth.x"))
{
 meshLoaded = true;
}

  代码第一句把网格对象的位置定为原点,接着偏移X轴2个单位,接下来从文件中得到此.X文件。如果成功设置,meshLoaded置为真。注意,这里有一个.X文件,在源代码中有此文件。

 


  在设置相机的函数中,加入一盏灯光:

device.Lights[0].Type = LightType.Directional;
device.Lights[0].Diffuse = Color.White;
device.Lights[0].Direction = new Vector3(0, -1, -1);
device.Lights[0].Update();
device.Lights[0].Enabled = true;


  此灯光较简单,仅为一个直射型白光灯。

最后,在Render()方法中,调用网格对象的Render()方法,以显示地球。

 

  三、使地球旋转

  前面用一个网格对象来建立地球,但此类没有平移,旋转及缩放等方法,下面就加入这些方法,因为这些方法具有通用性,因此可以新建一个类,把这些方法写在这些类中,使地球对象成为它的派生类。

  在工程中新添加一个类:BaseEarth;

  加入进行平移、旋转、缩放的变量:

 

private float xloc = 0.0f;
private float yloc = 0.0f;
private float zloc = 0.0f;
private float xrot = 0.0f;
private float yrot = 0.0f;
private float zrot = 0.0f;
private float xscale = 1.0f;
private float yscale = 1.0f;
private float zscale = 1.0f;


  加入相应的属性代码:

 

public float XLoc
{
 get
 {
  return xloc;
 }
 set
 {
  xloc = value;
 }
}
…………

 

  在Render()虚函数中,应用平移、旋转及缩放。
 

public virtual void Render()
{
 objdevice.MultiplyTransform(TransformType.World,Matrix.Translation(xloc, yloc, zloc));
 objdevice.MultiplyTransform(TransformType.World,Matrix.RotationAxis(new Vector3(1.0f, 0.0f, 0.0f), xrot));
 objdevice.MultiplyTransform(TransformType.World,Matrix.RotationAxis(new Vector3(0.0f, 1.0f, 0.0f), yrot));
 objdevice.MultiplyTransform(TransformType.World,Matrix.RotationAxis(new Vector3(0.0f, 0.0f, 1.0f), zrot));
 objdevice.MultiplyTransform(TransformType.World,Matrix.Scaling(xscale, yscale, zscale));
 return;
}

 

  现在回到地球类,需要将其改为新类的派生类,同时更改构造函数,另外,在Render()方法中,应先调用基类的Render()方法:


public override void Render()
{
 base.Render();
 //把位置变为世界坐标
 // meshDevice.Transform.World = Matrix.Multiply(locationOffset, worldTransform);
 //绘制网格
 。。。。。。
}

 


  现在,由于在基类中可以设置对象位置,因此,可以把与locationOffset相关,即与设置位置的变量及语句注释掉。

  四、加入月球

  在这一步加入月球,实际上是再创建一个网格对象新实例,只是把纹理进行更改即可,为了代码模块性更好,把两个对象放在一个新类CModel中,在工程中新添加一个类CModel,并声明对象实例。


public class cModel
{
 private cMeshObject mesh1 = null;
 private cMeshObject mesh2 = null;
 private bool modelloaded;
}


  把窗口代码中的Load()事件,放在CModel中,这次不仅生成了地球,而且生成了月球。

 


public void Load(ref Device device)
{
 mesh1 = new Earth(ref device);
 mesh2 = new Earth(ref device);
 if (mesh1.LoadMesh(@"..\..\earth2.x"))
 {
  modelloaded = true;
 }
 else
 {
  modelloaded = false;
 }
 if (mesh2.LoadMesh(@"..\..\moon.x"))
 {
  mesh2.XLoc += 20.0f;
  modelloaded = true;
 }
 else
 {
  modelloaded = false;
 }
}

 

  下面的Update()方法中,参数dir 用来判断是顺时针旋转还是逆时针旋转,另外,地球和月球绕Y轴增加的角度大小不同,也就决定了二者旋转的速度不同。


public void Update(int dir)
{
 if(dir > 0)
 {
  mesh1.YRot += 0.02f;
  mesh2.YRot += 0.05f;
 }
 else if(dir < 0)
 {
  mesh1.YRot -= 0.02f;
  mesh2.YRot -= 0.05f;
 }
}


  在下面的render()方法中,生成显示月球和地球:

 


public void Render(ref Device device)
{
 device.Transform.World = Matrix.Identity;
 if(modelloaded)
 {
  mesh1.Render();
  mesh2.Render();
 }
}


  把窗口代码中的加入灯光的方法,也放在此类中:


public void LoadLights(ref Device device)
{
 device.Lights[0].Type = LightType.Directional;
 device.Lights[0].Diffuse = Color.White;
 device.Lights[0].Position = new Vector3(0.0f, 0.0f, 25.0f);
 device.Lights[0].Direction = new Vector3(0, 0, -1);
}
public void Light(ref Device device)
{
 device.Lights[0].Update();
 device.Lights[0].Enabled = true;
}


  五、与鼠标交互操作

  为了实现与键盘、鼠标交互,新添加一个类:CMouse,添加引用Microsoft.DirectX.DirectInput,并添加命名空间。加入相关变量:


private Microsoft.DirectX.DirectInput.Device mouse = null;
public System.Threading.AutoResetEvent MouseUpdated;
private float x, y, z = 0.0f;
private byte[] buttons;

 

  在下面的构造函数代码中,首先创建鼠标设备,并初始化回调事件:


public CMouse(System.Windows.Forms.Control control)
{
 mouse = new Microsoft.DirectX.DirectInput.Device(SystemGuid.Mouse);
 mouse.SetCooperativeLevel(control, CooperativeLevelFlags.Background | CooperativeLevelFlags.NonExclusive);
 mouse.Properties.AxisModeAbsolute = false;
 MouseUpdated = new System.Threading.AutoResetEvent(false);
 mouse.SetEventNotification(MouseUpdated);
 mouse.Acquire();
 Update();

 


  下面的Update()方法中获得鼠标的坐标值,并赋给私有成员变量:

public void Update()
{
 MouseState state = mouse.CurrentMouseState;
 x = state.X;
 y = state.Y;
 z = state.Z;
 buttons = state.GetMouseButtons();
}


  还需要有一个函数来检测鼠标左键是否按下:

 


public bool LeftButtonDown
{
 get
 {
  bool a;
  return a = (buttons[0] != 0);
 }
}


  六、大结局

  现在已经做完了准备工作,返回到窗口代码中,需要对这里的代码重新进行一些调整:

  在图形初始化函数中创建一个CModel类及CMouse类:

 

private CModel model = null;
private CMouse mouse = null;
private bool leftbuttondown = false;
private float mousexloc;

 

  添加对鼠标初始化的方法:

 

网管联盟bitsCN@com


public void InitializeInput()
{
 mouse = new CMouse(this);
}


  添加UpdateInputState()方法,当按下鼠标左键时,将leftbuttondown值设置为真,当鼠标抬起时,将mousexloc置0:


private void UpdateInputState()
{
 mouse.Update();
 if (mouse.LeftButtonDown)
 {
  if(leftbuttondown == false)
  {
   mousexloc = 0.0f;
   leftbuttondown = true;
  }
  else
  {
   mousexloc = -mouse.X;
  }
 }
 else
 {
  leftbuttondown = false;
  mousexloc = 0.0f;
 }
}


  在此程序中,只对X值进行了操作,即只能左右转。

  Render()方法更新如下:

public void Render()
{
 UpdateInputState();
 device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.DarkGray, 1.0f, 0);
 SetupCamera();
 device.BeginScene();
 model.Update((int)mousexloc);
 model.Light(ref device);
 model.Render(ref device);
 device.EndScene();
 device.Present();
}

 

  最后更改Main()主函数:


static void Main()
{
 using (Form1 EarthForm = new Form1())
 {
  EarthForm.InitializeGraphics();
  EarthForm.InitializeInput();
  EarthForm.Show();
  while(EarthForm.Created)
  {
   EarthForm.Render();
   Application.DoEvents();
  }
  EarthForm.Dispose();
 }
 


Platform: | Size: 11817 | Author: mantoutou | Hits:
« 1 2 3 4 5 6 78 9 10 11 12 ... 50 »

CodeBus www.codebus.net