云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > C#WinForm编程(3).第33章使用GDI+绘图

C#WinForm编程(3).第33章使用GDI+绘图

  • 62 次阅读
  • 3 次下载
  • 2025/5/5 14:41:25

OnKeyUp(KeyEventArgs e) 释放被按下的键 注意,其中的一些事件是重叠的。例如,如果用户按下鼠标按钮,就会引发MouseDown事件。如果按钮被立即释放,就会引发MouseUp事件和Click事件。另外,一些方法带有一个派生于EventArgs的参数,而不是EventArgs本身的实例。这些派生类的实例可以给出特定事件的更多信息。MouseEventArgs有两个属性X和Y,它们给出鼠标按下时的设备坐标信息。KeyEventArgs 和 KeyPressEventArgs的属性则指定与事件相关的键。 这就是用户响应方法。用户应考虑自己要完成的工作的逻辑。唯一要注意的是,编写GDI+应用程序可能要比Windows.Forms应用程序做更多的逻辑工作,这是因为在Windows.Forms应用程序中,一般响应的是比较高级的事件(例如,文本框的TextChanged事件)。GDI+则相反,其中的事件都比较基本,用户单击鼠标,或按下键H。应用程序的操作取决于一系列事件,而不是一个事件。例如,在Word中,为了选择一些文本,用户通常要单击鼠标左键,再移动鼠标,最后释放鼠标左键。应用程序接收到MouseDown事件,但仅有这个事件是不能完成什么任务的,只是记录下该鼠标单击时光标的位置。那么,当接收到MouseDown事件时,就可以检查刚才的记录,确定鼠标左键是否被按下,如果是,突出显示的文本就是用户选择的文本。当用户释放鼠标左键时,对应操作(在OnMouseUp()方法中)就需要检查一下是否有拖动操作,即鼠标按钮被按住并移动。只有这样,这个序列才算完成。 另外,因为某些事件有重叠,常常要选择让代码响应哪个事件。 一般规则是仔细考虑鼠标移动或单击和键盘事件的每个组合的逻辑,确保应用程序以直观的方式响应,让应用程序在各种情况下都按照期望的方式执行。我们的工作大多数是思考,而不是编码,但通过编码,可以更精细地完成任务,因为我们需要考虑用户输入的许多组合。例如,如果用户开始键入文本,而鼠标按钮处于按下状态,应用程序该如何响应?这听起来是不可能的,但迟早用户会尝试这么做的! 在CapsEditor示例中,为了使工作尽可能简单,并没有真正考虑任何组合的用户输入。只响应了用户的双击,此时把光标所在的那行文本变为大写字母。 这应是一个相当简单的任务,但有一个障碍,需要捕获DoubleClick事件。但上表说明,这个事件带一个EventArgs参数,不是MouseEventArgs参数,问题是如果要把一行文本正确标识为大写,我们需要知道用户双击时光标在什么地方,并需要一个MouseEventArgs参数。有两个解决办法,一个使用一个静态方法,由Form1对象Control.MousePosition执行,确定光标的位置: protected override void OnDoubleClick(EventArgs e) { Point MouseLocation = Control.MousePosition; // handle double click } 在大多数情况下,这个方法可以正常工作。但如果应用程序(甚至是其他一些有较高优先级的应用程序)在用户双击时进行某些计算密集型的工作,该方法就会有问题。此时要在等待大约半秒钟后,才调用OnDoubleClick()事件处理程序。我们不期望有这样的延迟,因为这会让用户感到很厌烦,但有时因为应用程序不能控制的原因(例如计算机较慢),会偶尔发生这种情况。半秒的时间足够光标在屏幕上移动到其他位置了-- 此时会对完全错误的位置执行Control. MousePosition! 比较好的方法是依赖于鼠标事件之间的重叠。双击鼠标的第一部分涉及到按下鼠标左键。这表示如果调用了OnDoubleClick(),我们就知道OnMouseDown()刚被调用,此时鼠标的位置不变。可以使用OnMouseDown()重写方法记录光标的位置,为OnDoubleClick()作准备。这就是在CapsEditor中采用的方法: protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); this.mouseDoubleClickPosition = new Point(e.X, e.Y); } 下面看看OnDoubleClick()重写方法,该方法完成了许多工作: protected override void OnDoubleClick(EventArgs e) { int i = PageCoordinatesToLineIndex(this.mouseDoubleClickPosition); if (i >= 0) { TextLineInformation lineToBeChanged = (TextLineInformation)documentLines[i]; lineToBeChanged.Text = lineToBeChanged.Text.ToUpper(); Graphics dc = this.CreateGraphics(); uint newWidth =(uint)dc.MeasureString(lineToBeChanged.Text, mainFont).Width; if (newWidth > lineToBeChanged.Width) lineToBeChanged.Width = newWidth; if (newWidth+2*margin > this.documentSize.Width) { this.documentSize.Width = (int)newWidth; this.AutoScrollMinSize = this.documentSize; }

搜索更多关于: C#WinForm编程(3).第33章使用GDI+绘图 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

OnKeyUp(KeyEventArgs e) 释放被按下的键 注意,其中的一些事件是重叠的。例如,如果用户按下鼠标按钮,就会引发MouseDown事件。如果按钮被立即释放,就会引发MouseUp事件和Click事件。另外,一些方法带有一个派生于EventArgs的参数,而不是EventArgs本身的实例。这些派生类的实例可以给出特定事件的更多信息。MouseEventArgs有两个属性X和Y,它们给出鼠标按下时的设备坐标信息。KeyEventArgs 和 KeyPressEventArgs的属性则指定与事件相关的键。 这就是用户响应方法。用户应考虑自己要完成的工作的逻辑。唯一要注意的是,编写GDI+应用程序可能要比Windows.Forms应用程序做更多的逻辑工作,这是因为在Windows.Forms应用程序中,一般响应的是比较高级的事件(例如,文本框的TextChanged事件)

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com