为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

【doc】基于.NET的鼠标光标的研究及应用

2017-10-15 13页 doc 34KB 20阅读

用户头像

is_212655

暂无简介

举报
【doc】基于.NET的鼠标光标的研究及应用【doc】基于.NET的鼠标光标的研究及应用 基于(NET的鼠标光标的研究及应用 sovrWAREDEVELOPMENTANDDESIGN软件开发与设计…………… ?……………………………………-? ……????????????????……?………………………??…… ??……… ……… 基于.NET的鼠标光标的研究及应用 宁玉兆,朱娜敏.,王泽红,张锋 (1.63716部队指挥自动化站,岢岚036301;2.兰州交通大学光电技术与智能控制教 育部重点实验室,兰州730070) 摘要:Windows正常情况下,...
【doc】基于.NET的鼠标光标的研究及应用
【doc】基于.NET的鼠标光标的研究及应用 基于(NET的鼠标光标的研究及应用 sovrWAREDEVELOPMENTANDDESIGN软件开发与设计…………… ?……………………………………-? ……????????????????……?………………………??…… ??……… ……… 基于.NET的鼠标光标的研究及应用 宁玉兆,朱娜敏.,王泽红,张锋 (1.63716部队指挥自动化站,岢岚036301;2.兰州交通大学光电技术与智能控制教 育部重点实验室,兰州730070) 摘要:Windows正常情况下,鼠标光标形状为向左上角的单箭头符号.在开发应用 软件的过程中,常常需要建立 不同鼠标光标位置及状态,以提醒用户正在或即将进行的某种类型行为.本文应 用.NET软件中的vc++,VC#等语 言分别实现了对特定活动范围或特定边界的鼠标光标位置进行精确设定. 关键词:鼠标光标;像素;热点;光标位图 ThemousecursorResearchandApplicationBaseOn.Net NINGYurkao,ZI-IUNWANGZehongt,ZtL~GFeng~ (1.Automa~dCommandSmfionof63716Troops;KeLan036301; 2.KeyLaboratoryofOpto-ElectronicTechnologyandIntelligentControl;MinistryofEduca tion;Lanzhoujiaotong University,Lanzhou730070) 【Abstract】 Undernormalcircumstancesofthewindows,theshapeofthemousecursoristheupperleftco merasasingle arrowsymbols.Inthedevelopmentinapplicationsoftwareofprocess,differentlocationands tatusofmousecursoroftenare established,inordertoalerttheuserthattheyarehavingorgoingtohaveacertaintypeofconduc t.Inthispaper,theproject appliestheVC++,VC#andSOontosetthespecificscopeorthespecificborderofmousecurso r'slocationaccurately. 【Keywords】Themousecursor;Pixels;Hotspot;Thecursorbitmap 1工作原理 鼠标是计算机常用的外部设备之一,为了显示鼠标的精 确作用位置即热点,引入了光标.光标是一种资源,也叫做 指针,光标fcursor)是鼠标指针的属性.在.NET中,光标是 在鼠标位置上显示的32*32像素的图像,并且最大只能是 32*32像素.光标可以是32*32像素内的任意形状,但无论是 使用系统光标还是自绘光标都必须先加载.如果在窗口中设 置并加载光标,则系统向当前窗口发送SETCURSOR之类的消 息,应用程序窗口接收到此消息并进行处理,通过判断鼠标 当前的位置来捕捉光标热点,根据热点所在的区域显示加载 的光标. 2光标实现 2.1光标热点 光标热点是位于光标位图上的单一像素,它确定了鼠标 的确切位置,是所跟踪的实际鼠标指针位置.在Vc++.NET 中,Windows系统标准的箭头光标热点在默认位于图像的左上 角,即光标位图的(0,0)处.自绘光标位置的热点是在绘 制光标时设定的.自绘鼠标光标时,一定要设置光标的热点, 否则光标默认热点位置为其(0,0).如果不能根据光标热点 精确设置鼠标范围,则鼠标光标在窗口中不能正常显示. 2.2不同范围内光标的实现 (1)在视图窗口内绘制矩形.以此矩形为基准精确设定 光标的不同活动范围,以便根据此矩形左右边框的不同区域 展示鼠标光标.具体代码如下: voidCcurView::OnDraw(CDCpDC) { 本文收稿日期:2008年5月26日 ._8一 CcurDocpDoc=GetDocument0: ASSERT_VALID(pDoe); if(!pDoc) return; pDC一>Rectangle(200,踟,300,180);,,绘制基准矩形 } (2)绘制如图1所示的光标位图,其ID为IDC_curl,大 小为22*9像素,光标中左,右箭头宽均为6像素,高为9像 素.并应用其默认热点位置(0,0). 图1自制光标IDC—curl 同样,绘制如图1所示的另一光标位图,其ID为 IDC,在其上位置(1,5)处设置热点._ cur21 (3)实现OnMouseMove消息处理函数.Windows向当前 窗口发送WM—MOUSEMOVE消息,应用程序窗口接收 WM_ MOUSEMOVE消息并进行处理,从而触发OnMouseMove 函数.此函数根据鼠标移动过程中传递的point坐标,判断鼠 标所处的位置.当位置处于基准矩形左右边框范围内时,可 软件开发与设计SOFTWAREDEVELOPMENTANDDESIGN?? ?……………………?………?………?…?……………-…………………… ?……………………………?……………?? 使光标特殊显示.函数实现代码如下: voidCcurView::OnMouseMove(UINTnFlags,CPoint point) , { //TODO:在此添加消息处理程序代码和/或调用默认值 CRectLrect(200-(22-62),80+5,200,180+5); ,/定义光标活动的左区域 CRectRrect(300-(22-62),2,80—5,300+(22_叫62),2, 180); 腚义光标活动的右区域 if(Lrect.PtlnRect(poin0) { HCURSORCUr=AfxGetApp()一>LoadCursor (IDC_cUr1); ,,力?载自定义光标,并返回光标句柄值 ::SetCursor(cur); 肌殳置加载的光标为当前区域活动光标 l if(Rrect.PtInRect(point)) f HCURSORcur=AfxGetApp()->LoadCUrsor (IDC_cUr2); ::SetCUrSOr(cur); l CView::OnMouseMove(nFlags,point); ) 执行程序中坐标为(200,80,300,180)的矩形左边框活动区 域内各边界的光标IDC—curl显示效果如图2-5所示: 图2光标左图3光标右图4光标左图5光标右 上边界上边界下边界下边界 执行程序中坐标为(200,80,400,280)的矩形右边框活动区 域内各边界的光标IDC_cur2显示效果如图6-9所示: 图6光标 左上边界 图7光标 右上边界 图8光标 左下边界 图9光标 右下边界 2.3结论 综上所述,对如图1所示的光标,根据设置热点位置的 不同可得出光标活动区域.' 默认光标热点为(0,0)处的光标活动区域矩形的坐 标为: r基准位置左边界地坐标一有效光标位图像素宽度.1 I基准位置上边界J,坐标1/2?光标位图的实际高固,l l基准位置右边界X坐标.1 I基准位置下边界y坐标1/2?光标位图的实际高固J 光标热点为实际光标中心点时,光标活动区域矩形的坐 标为: r基准位置左边界坐标一1/2}有效光标位图宽度,1 I基准位置上边界y坐标,I I基准位置右边界坐标+1/2*有效光标位图宽度,l I基准位置下边界脞标J 在如图1所示的光标中,无论光标热点为光标位图的 (0,0)处还是中心处,有效光标位图宽度均为光标位图的实 际像素宽度一光标位图左箭头的像素宽度一光标位图右箭头的 像素宽度.当基准位置需要出现光标特殊操作的提示时,就 可以根据以上公式对矩形区域进行设置. 鼠标光标可以限定在视图窗口的任意区域内,但是区域 只是对光标的热点起作用,而非整个光标.此性能亦可用于 将光标限定在菜单范围之内,对话框范围之内等. 3基于VC#.NET的光标实现 3.1光标的热点 在VC#.NET中,添加的光标文件的热点是固定的,均为 32*32像素的中心点.在设计光标的过程中,热点是无法改变 的,因此,为了方便应用,把设计的光标有效点放在32*32 像素文件的中心点,如图10所示. 3.2不同范围内光标的实现 (1)在视图窗口内绘制基准矩形.代码如下: privatevoidOnpaint(objectsender,System.Windows. Forms.PaintEventArgse1 { g.DrawRectangle(Drawpen,1oo,100,100,100); ,,g为Forml内定义的公共的Graphics类型的变量 ,,Drawpen为Forml内定义的公共的Pen类型的变量 J (2)绘制如图1O所示的光标位图. 图1O自制光标ExP( 下转到15页) 一 9一 软件开发与设计SOFI'WAREDEVELOPMENTANDDESIGN-?……………-……?………?……??_?……--……????……??……-??-……???……???……????……???-……???-………?…?? 入三维视图显示工具中即可查看,本例是为某CFD/NHT算例 生成的计算网格,具体网格如图2所示. 图2某CFD/NHT计算网格 4结论 目前对Fortran与VB和vc++等的混编研究进行的较多, 技术较为成熟,而与C群混编实现的讨论则少见.本文主要讨 论了Fortran与c#混编技术,进而保证CFD/NHT等大型计算 软件系统的计算性能和友好界面的兼得. 尤其是对于CFD/NHT之类的大型科学计算软件,混合编 程技术可以提高软件集成度和可操作性,尤其是在软件的计 算速度和维护性上显得更具吸引力.同时,一套CFD/NHT软 件系统很可能是多个单位或者程序员协同开发完成的,混合 编程技术使得各独立功能模块的独立开发变得更加容易和自 由.各单元只要约定好数据接口就行了,各独立模块的实现 可以应用不同的开发语言,编程的重心转移到功能模块最佳 性能的实现上,进而使得整个软件系统的整体性能最优. 参考文献 [1]王福军.计算流体动力学分析——cFD软件原理与应用.北 京:清华大学出版社,2006 【2】朱从旭.混合编程与Fortran计算程序图形界面的实现.中 南工大,200231(6) 【3】欧阳永忠,王瑞.VC,VB与Fortran的混合编程技术及其 实现.海洋测绘,200424(1) [4】张学胜.用vB和Fortran混合编程开发科学计算软件.计算 机应用,2003,23 [5]夏舒杰等.基于文件操作的Vc++和Fo~ran模块交互通信 方法.计算机工程,200329(9) [6]任慧,周振红.Fo~ran与C/C++的混合编译.计算机工程与 设计,200728(17) [7】马清华,王明海.Visualc++与CompaqVisualFo~ran混合 编程研究.计算机仿真,200421f2) 作者简介 朱泰山(1984一),男(汉族),湖北松滋人,硕士研究生,研究 方向:计算流体力学及其软件开发; 王一一(1984一),女(满族),辽宁葫芦岛人,硕士研究生,研 究方向:人机翻译(CAT); 冯国泰(1939一),男(汉族),教授,博士生导师,研究方向: 叶轮机械及其CFD. 基金项目:国家自然科学基金资助项目fNO.50476028) (上接第9页) (3)实现Forml的鼠标事件MouseMove的方法如下: pfiva~voidForml_ MouseMove(objectsender,System. Windows.Forms.MouseEventArgse) { P.X=e.X: ,,p为Forml内定义的公共的Point类型的变量 p.Y=e.Y: Rectanglel_rect=newRectangle(95,100,10,10o); Rectangler_rect=newRectangle(195,100,10,100); if(1_rect.Contains(p)IIr__rect.Contains(p)) myCursor=newCu~or(this.GetType0,"EXP.cur"); else myCursor=newCursor(this.GetType(),"ARROW. cur"); this.Cursor=myCursor; } 执行程序最终可达到如图2一图9所示的效果. 4基于VB.NET与VJ#.NET的光标实现 在VB.NET中,光标的热点可以根据需要设定.其实现过 程可以根据VC++.NET中的方法来确定,所得光标活动区域矩 形的坐标与Vc++.NET中的坐标确定方式相同. 在vj#.NET中,光标的热点是固定的.实现过程可以根 据VC#.NET中的方法来确定,所得光标活动区域矩形的坐标 与VC#.NET中的坐标确定方式相同. 5结论 应用VC#.NET实现光标不同区域显示的不同与在vC++. NET中光标热点为实际光标位图的中心点时的情况相同,其 光标活动区域矩形的坐标亦为: 基准位置左边界坐标一1/2+有效光标位图宽度 基准位置上边界y坐标, 基准位置右边界Y坐标+1/2?有效光标位图宽度, 基准位置下边界脞标 参考文献 【1】吴涛.如何在VB中使用自定义光标[J】.光盘技术,1997, (6):23,29. [2】李耀辉,杜刚.鼠标光标的实现原理及其形状的设置[J].电 脑知识与技术,1999,f2);47-48. [3]3罗斌编着.Viaualc++编程技巧精选500例[M】.北京:中 国水利水电出版社,2005.1oo—l08. 【4J黄国明编着.用Visualc++.NET开发交互式CAD系统[M】. 北京:电子工业出版社,2003-306—309. 【5】刘长明,杨工明编着.VisualC++实践与提高一多媒体篇 (下转到2l页) —— 15—— 软件开发与设计 SOFFWAREDEVELOPMENTANDDESIGN……………………………?-…………………??…………………?………………?………………?-- ?…………………?? ifopendialog1.Executethen iftrimfopendialog1.FileName)?,then begin FoxitReaderSDk1.CloseFile0; FoxitReaderSDk1.OpenFile(trim(opendialog1.File— Name),,); FoxitReaderSDK1.ShowBookmark(1); end; "关闭"菜单的代码如下: ifFoxitReaderSDk1.FilePath<>then FoxitReaderSDk1.CloseFile0; 3.3调整PDF页面大小 PDF文档视图的缩放是PDF阅读器的重要功能,只要不 是扫描的PDF文档,其放大缩小无任何失真,这是PDF文档 成为电子出版物标准的重要原因. 通过FoxitReaderSDK1.SetZoomLevel(n)方法设置显示页 面的大小.如n为75时,是设置PDF文档以实际页面大小的 75%显示.显示页面的实际大小时,n为100.适合页面大小 时n为1,适合宽度大小时n为2. 3.4PDF文档的旋转,显示书签以及打印功能 (1)查看一些纵向横排的报时,可能用到顺时针和逆 时针旋转.顺时针旋转的代码是: ifFoxitReaderSDK1.FilePath<>,then 顷时针旋转 caseFoxitReaderSDK1.Rotateof O:FoxitReaderSDK1.SetRotateMode(1); 1:FoxitReaderSDK1.SetRotateMode(2); 2:FoxitReaderSDK1.SetRotateMode(3); 3:FoxitReaderSDK1SetRotateMode(0); end; 其中FoxitReaderSDK1.Rotate是获取当前视图的旋转参数, FoxitReaderSDK1.SetRotateMode(Rotate)是设置旋转方向. Rotate=0表示页面未旋转,以此为基准,Rotate=l表示页面顺 时针旋转90度,Rotate=2表示页面顺时针旋转180度,R0一 mte=3表示页面逆时针旋转90度. (2)通过书签可以快速定位到某一页.显示书签的代码: FoxitReaderSDK1.ShowBookmark(1); 如果参数为0,则不显示书签. (3)FoxitReaderSDK提供了最简单的打印解决: FoxitReaderSDK1.PrintFile; 显示打印对话框,并可以设置各种打印参数.? 3.5查找文本功能 添加了一个查找文本对话框FindDialogl,与FoxitReader- SDK1.FindNext0结合进行查找."查找文本"菜单的代码 如下: ifFoxitReaderSDK1.FilePath<:,then finddialog1.Execum; 然后在FindDialogl的onFind事件处理中的代码如下: Var 腰查找的文本内容 sFindText:string; 腥否区分大小写,是否全字匹配,是否向下查找 bMatchCase.bMatchWh0leWord,bSearchDown:boolean; begin sFindText:=FindDialog1.FindText; iffrMatchCaseinFindDialog1.OptionsthenbMatchCase:= true; if行WholeWordinFindDialog1.OptionsthenbMatchW- holeWord:--true; iffrDowninFindDialog1.OptionsthenbSearchDown:= true; ,/利用FindNext方法进行查找 FoxitReaderSDK1.F协dNext(sFiIldText,bMa~hCase,bMatch— Who1eWord,bSearchDown); end; 程序运行界面如图3所示. 图3运行界面 4总结 通过开发PDF文档阅读器,探讨了FoxitReaderSDK的 使用,实现了基本的PDF浏览,查找文本和打印等功能.可 以看出,FoxitReaderSDK(ActiveX)具有快速打开和显示 PDF文件,将为大型软件工程中PDF文档的显示提供有力的 技术支持.代码在WindowsXP+Delphi7.0下调试通过. 作者简介 刘红军(1970一),男,讲师顾士,主要研究方向:面向对象 的软件开发. (上接第15页) 【M】.北京:中国铁道出版社,2001.185—190. [6】【美】罗勃特?约丹着,郝金川刘涌等译.程序员疑难问题详 解PeterNorton编程宝库【M1.北京:电子工业出版社, 1994. 【7】童爱红编着.Visualc#.NET应用教程【M】.北京:清华大学 出版社?北京交通大学出版社,2004. 【8】苏金明,周建斌编着.用VB.NET和VisualC#.NET开发交互 式CAD系统【M】.北京:电子工业出版社,2004. 作者简介 宁玉兆(1979一),男,助理工程师/学士,计算机; 朱娜敏(1980一),女,硕士在读,交通信息工程与控制: 王泽红(1973一)工程师,学士,通信; 张锋(1974一),高级工程师/学士,通信. 一 21—
/
本文档为【【doc】基于.NET的鼠标光标的研究及应用】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索