小标
2018-08-13
来源 :
阅读 1548
评论 0
摘要:本文主要向大家介绍了使用C#编程中的GDI+功能实现旋转文字验证,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。
本文主要向大家介绍了使用C#编程中的GDI+功能实现旋转文字验证,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。
登录某些网站时除了输入用户名和密码,有时还会要求在密码框下方输入在图片中显示的随机验证码,或是解答在图片中随机出现数学题。前段时间又见到一种验证方式,在图片中随机出现几个中文字符,每个字符或立、或倒、或卧、或躺,用户点击某字符,该字符会顺时针(或逆时针)旋转90度,需要用户将每个字符都变成立着的才算验证通过(写本文时再到需要登录的网站中看,已经见不到这种验证方式了)。
我平时使用C#中的GDI+功能较多,看到这种旋转文字验证方式之后,感觉可以使用GDI+来实现旋转文本验证,于是写了个简单的测试程序,本文即叙述该功能的实现过程。
功能分析
旋转文字验证功能包括下面几个子功能:
创建旋转文字:随机生成不同旋转角度的文字 显示旋转文字:在控件中显示旋转文字 鼠标点击旋转文字:用户点击某旋转文字,然后顺时针或者逆时针旋转文字 验证旋转文字:验证是否所有的文字都已经是立着的
程序设计
首先定义一个旋转文本类RotatedText,该类表示一个旋转的文字,该类中的属性和方法如下图所示:
其中:
ANGLES:静态属性,所有可用旋转角度的集合,本文中文本角度固定为0、90、180、270四个角度;
m_angle及ANGLE:记录文字对象当前的旋转角度;
m_bound及BOUND:记录文字的区域,用于绘制文字和定位文字,测试程序中,为简单起见,默认设置区域为正方形;
m_text:要绘制的旋转文字内容;
ROTATE_TEXT_ANGLE_STEP:用户每次点击旋转文本,然后旋转文本增加的旋转角度,固定为90度;
ROTATE_TEXT_FONT:文本的字体,测试程序中是固定为宋体,字号为12。
DrawText函数绘制旋转文字;
InitPosition函数初始化旋转文字所占区域的左上角坐标
RotateTextAnticlockwise函数逆时针90度旋转文字
RotateTextClockwise函数顺时针90度旋转文字
测试程序中创建和显示旋转文字的主要流程如下:
1)测试程序的界面如下,用户在原始文本出输入要进行旋转测试的文本,然后点击生成按钮创建旋转文字,并在内容显示区域显示
2)为用户输入的每个文字都创建响应的RotatedText对象,并初始化文字对象的区域大小,随机生成文字方向;
3)初始化每个RotatedText对象,这里有点偷懒,就是随机生成每个对象的左上角坐标位置,直到不与其它对象的区域重叠为止;
4)绘制RotatedText对象稍微麻烦一些,如下左图所示,为了使文字在旋转之后还在规定的区域内,在绘制旋转文字时,首先将坐标原点移动至文字区域中心,然后旋转坐标系,这时区域的左上角坐标始终是(-Bound.Width/2,
-Bound.Height/2),然后就是调用Graphics.DrawString方法绘制旋转文本,这样无论文本如何旋转,它始终在步骤3生成的文字区域内旋转。这里还需要注意的一点是窗口坐标系如下右图所示,而不是笛卡尔坐标系, 因此区域的左上角坐标是(-Bound.Width/2,-Bound.Height/2),而不是(-Bound.Width/2,Bound.Height/2)。
用户鼠标点击旋转文字:
由于每个RotatedText对象都保存有区域信息,只要判断鼠标在哪个对象所在区域就可以对那个进行旋转(调用对象的RotateTextClockwise和RotateTextAnticlockwise函数)。
验证旋转文字
只要判断每个RotatedText的Angle属性是不是0就可以了。
最后是程序的截图,
程序的源码地址为:https://github.com/guochao2299/UserValidationOfRotatedText
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C#.NET频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号