你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / C专栏
使用C#中的GDI+功能实现旋转文字验证
 

登录某些网站时除了输入用户名和密码,有时还会要求在密码框下方输入在图片中显示的随机验证码,或是解答在图片中随机出现数学题。前段时间又见到一种验证方式,在图片中随机出现几个中文字符,每个字符或立、或倒、或卧、或躺,用户点击某字符,该字符会顺时针(或逆时针)旋转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

  推荐精品文章

·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 
·2023年7月目录
·2023年6月目录 
·2023年5月目录
·2023年4月目录 
·2023年3月目录 
·2023年2月目录 
·2023年1月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089