`
444878909
  • 浏览: 638945 次
文章分类
社区版块
存档分类
最新评论

<Win32_6>Win32的验证码程序

 
阅读更多

上次利用文本输出规范,我写了一个"程序员求爱程序",今天还是继续玩一下Win32的文本输出,这次我将详细谈一下Win32的文本输出规范。毕竟,这个在Win32编程中还是很重要的,基本上每一个程序都离不开这个玩意儿

ok,先来说一下基础:

Win32中有一个关于文本信息的结构体TEXTMETRIC,它包含很丰富的文本信息,而P先生(Charles Petzold)的书中说道,我日常编程中仅仅用到其中几个,以下就是:

{ 
  LONG tmHeight; 		//每一行文本的高度
  LONG tmAscent; 		//上边沿字符(相对于基线baseline)
  LONG tmDescent; 		//下边沿字符(相对于基线baseline)
  LONG tmInternalLeading; 	//重音符号的高度
  LONG tmExternalLeading; 	//每一行字符的间距
  LONG tmAveCharWidth;    	//字符平均高度
  LONG tmMaxCharWidth;    	//最大字符的宽度
  BYTE tmPitchAndFamily;  	//字体的一些信息(但是就目前而言,这个信息的低8位多数用于大写字符的判断)
}

继续用P先生的一张图来诠释这些玩意儿:

这个东西还是不难看懂,主要是要熟记,这样以后就不用查看api,直接上阵演练

好了,有了这些基础,我们就开始今儿的主题,编写一个简易的验证码程序

先来瞧一眼它的运行效果:

主要功能如下:

(1)验证码显示的位置在一定范围内随机、验证码在0~9随机、验证码颜色随机

(2)鼠标点击验证码可以变换(这个和实际生活中见到的是一样的)

下面来看看试下细节吧:

(1)重要的变量:

static intcxChar, cxCaps, cyChar;//大小写字符的宽度、字符的高度 static RECTrect;//验证码显示的范围 TEXTMETRICtm;//文本信息结构体

//分别表示验证码、坐标xy(为了节省空间 , 用于验证码的坐标和鼠标点击的坐标)、循环变量 intnum, x, y, i; TCHARstr[2];//验证码数组


(2)验证码的实现

实现代码如下:

//先画出验证码的范围 , 矩形(默认是白色的刷子 , 所以矩形的背景是白色)
Rectangle(hdc, rect.left, rect.top, rect.right, rect.bottom);

//打印验证码
for(i=0; i<4; i++)
{
	SetTextColor(hdc, RGB(rand()%255, rand()%255, rand()%255));//设置随机文本颜色

	//设置随机验证码
	num = rand()%10;
	wsprintf(str, TEXT("%d"), num);

	//设定每一位验证码的坐标
	x = rect.left + 20 + i * (cxChar + cxCaps);
	y = rand()%(31 - cyChar) + 90;

	//显示验证码
	TextOut(hdc, x, y, str, 1);
}


我主要讲一下这一行代码:

y = rand()%(31 - cyChar) + 90;

这里主要是控制验证码在矩形区域的中间一个范围显示,那为什么要见一个cyChar呢?

对于rand()求余运算,就是获得0~(31 - cyChar)之间的随机数,而cyChar是字符的高度

因为显示字符的位置是它左上角的坐标,如果不减去字符的高度,那么仅仅是字符的左上角坐标在我们想要的范围内,字符的显示却会超出这个范围

今儿这个程序很简单,但是重在它能体现文本输出的一些技巧,个人觉得还是比较重要的,希望读者多下点儿功夫吧

源代码下载
分享到:
评论

相关推荐

    Win32验证码程序

    用Win32实现的简易的验证码程序 http://blog.csdn.net/crocodile__/article/details/9612189 (主要用于博文资源下载)

    phpwin免费论坛

    独创的防攻击技术、安全验证码,进一步完善了站点的保障体系。 4. 强大而完善的功能 PHPWind论坛系统 除了具备多重子版块.和后台用户组权限可以自由组合外, 还具备分版块控制生成html页面、可选用的所见即所得编辑...

    沙漠风网站内容管理系统

    ################################&lt;br/&gt;# #&lt;br/&gt;# Smart_A CMS #&lt;br/&gt;# 沙漠风网站内容管理系统 #&lt;br/&gt;# Web Content Manage system #&lt;br/&gt;# #&lt;br/&gt;################################&lt;br/&gt;&lt;br/&gt;程序版本:v10.0(授权...

    python3 ocr 识别图片文字(CSDN验证码90%通过)

    这个库底层是用的tesseract.exe 这里包含win32 win64 系统的二进制文件。在winxp32 win7 64测试通过。 由于要调用底层文件系统,读写图片,使用程序。所以当 前目录和引用目录很重要。做了一些修改目录的工作。 ...

    精易官方免费模块v3.60版

    增加可空参数&lt;WIN系列系统&gt; 修复 WIN7下堆栈错误,感谢 小爬虫 的提醒 注:内部DLL "_关机对话框"改名“_关机对话框_XP” ,新增内部DLL "_关机对话框_WIN" 2.修复“音乐_停止”“音乐_暂停”返回值问题 感谢 小...

    精典SQL仿阿里巴巴B2B商贸行业网,行业网模板,行业建站首选

    http://www.maxtang.cn/dow/b2b.rar&lt;br&gt;界面预览:http://www.maxtang.cn/dow/b2b.jpg&lt;br&gt;联系方式:QQ:382933011,294990966,604060109&lt;br&gt;软件容量:25000 KB&lt;br&gt;软件类型:免费软件&lt;br&gt;应用平台:Win9x/Me/NT/...

    win7自建无线网命令行程序,附注释源码

    win7 自建无线承载网络的脚本程序,可用于win7系统自建无线网络共享上网

    本地部署的英文数字验证码识别插件 按键精灵、触摸精灵、触动精灵、Python等所有语言和平台都可方便对接 识别效果很牛

    1.本插件需一台电脑或者服务器做验证码识别(WIN10、11、2012、2016、2019系统均可)。 2.本插件已经将所有环境都封包完整了,生成了启动程序.exe文件,双击直接开启服务,不用配置环境。 2.插件是以web服务的形式...

    精易模块[源码] V5.15

    6、修复“网页_创建快捷方式”在win7以上系统不能自定义图标的BUG,感谢易友【蓝风】反馈。 7、修复“进制_十六到十”不支持长整数的BUG。 8、新增“类_时钟”,类似易语言自带时钟控件,可设置时钟周期。 MD5:E31C...

    webQQ 编译好的程序和源程序 网页qq

    webqq_server.exe Win32编译的WebQQ服务器可执行文件。 webqq.so Linux编译的WebQQ运行库。 cwebserver Linux编译的WebQQ服务器可执行文件。 对于使用本软件造成的各种后果,本人不负任何责任。 关于使用本软件的...

    visual studio 2008 win7无法输入注册码补丁文件

    visual studio 2008 win7是无法输入注册码的 一下提供一个补丁 在卸载程序页面上 点击这个补丁 会显示出注册码输入框!~以提供输入注册码

    百度贴吧WAP签到器v1.7

    软件介绍: 百度贴吧WAP签到器是一款专门为百度贴吧签到系统开发的一款签到软件,其目的是为了方便用户签到所喜欢的贴吧,本软件与&lt;百度贴吧自动签到器&gt;不同之处在于本软件使用WAP方式进行签到,可享有手机签到享受1.5倍...

    仿世纪佳缘婚介交友系统5.3 ASP+SQL

    &lt;6&gt;、群组等级默认人数,这个可以从等级组(等级)管理中对群组设置进行设置。 &lt;7&gt;、设置群组热贴,即为当然一个贴子点击超过这个数值时,会显示为热贴。  (8)上传选项设置:(非常重要) &lt;1&gt;、上传组件...

    googleAuthenticator windows版

    googleAuthenticator windows版 googleAuth winAuth win10版 谷歌双向认证win版程序

    一漂亮的PHP图片验证码实例

    在网上看到一个图片验证码,挻漂亮的,但是取回来发现,好像有点小问题,还是改为自己的口味吧,很多时候,如果无法使用,应该是字体的问题。程序所用的字体win7 自带的,需要上传到web目录

    C#基类库大全

    2.Api_Win32_Mac类工具包 3.在c#程序中放音乐的帮助类 GDI+相关,图像相关 1.生成缩略图的类文件SmallImage C#基础类库 1.Chart图形 Assistant创建显示图像的标签和文件 OWCChart统计图的封装类 2.Cookie&Session;...

    语言跟读小程序

    目前是测试版本,故未接入短信平台,所以手机是收不到验证码的,直接点获取验证码就已经填上了 如需在微信中体验完整功能,请联系文末的邮箱,注明理由和微信号申请体验权限 使用过程遇到的坑丶记录 背景图不生效...

    python操作同花顺客户端下单程序

    通过python操作同花顺客户端下单程序。 使用环境: 电脑系统win7 python2.7 pywinauto0.6.5 同花顺网上股票交易系统5.0环境下测试通过。

Global site tag (gtag.js) - Google Analytics