上次利用文本输出规范,我写了一个"程序员求爱程序",今天还是继续玩一下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实现的简易的验证码程序 http://blog.csdn.net/crocodile__/article/details/9612189 (主要用于博文资源下载)
独创的防攻击技术、安全验证码,进一步完善了站点的保障体系。 4. 强大而完善的功能 PHPWind论坛系统 除了具备多重子版块.和后台用户组权限可以自由组合外, 还具备分版块控制生成html页面、可选用的所见即所得编辑...
################################<br/># #<br/># Smart_A CMS #<br/># 沙漠风网站内容管理系统 #<br/># Web Content Manage system #<br/># #<br/>################################<br/><br/>程序版本:v10.0(授权...
这个库底层是用的tesseract.exe 这里包含win32 win64 系统的二进制文件。在winxp32 win7 64测试通过。 由于要调用底层文件系统,读写图片,使用程序。所以当 前目录和引用目录很重要。做了一些修改目录的工作。 ...
增加可空参数<WIN系列系统> 修复 WIN7下堆栈错误,感谢 小爬虫 的提醒 注:内部DLL "_关机对话框"改名“_关机对话框_XP” ,新增内部DLL "_关机对话框_WIN" 2.修复“音乐_停止”“音乐_暂停”返回值问题 感谢 小...
http://www.maxtang.cn/dow/b2b.rar<br>界面预览:http://www.maxtang.cn/dow/b2b.jpg<br>联系方式:QQ:382933011,294990966,604060109<br>软件容量:25000 KB<br>软件类型:免费软件<br>应用平台:Win9x/Me/NT/...
win7 自建无线承载网络的脚本程序,可用于win7系统自建无线网络共享上网
1.本插件需一台电脑或者服务器做验证码识别(WIN10、11、2012、2016、2019系统均可)。 2.本插件已经将所有环境都封包完整了,生成了启动程序.exe文件,双击直接开启服务,不用配置环境。 2.插件是以web服务的形式...
6、修复“网页_创建快捷方式”在win7以上系统不能自定义图标的BUG,感谢易友【蓝风】反馈。 7、修复“进制_十六到十”不支持长整数的BUG。 8、新增“类_时钟”,类似易语言自带时钟控件,可设置时钟周期。 MD5:E31C...
webqq_server.exe Win32编译的WebQQ服务器可执行文件。 webqq.so Linux编译的WebQQ运行库。 cwebserver Linux编译的WebQQ服务器可执行文件。 对于使用本软件造成的各种后果,本人不负任何责任。 关于使用本软件的...
visual studio 2008 win7是无法输入注册码的 一下提供一个补丁 在卸载程序页面上 点击这个补丁 会显示出注册码输入框!~以提供输入注册码
软件介绍: 百度贴吧WAP签到器是一款专门为百度贴吧签到系统开发的一款签到软件,其目的是为了方便用户签到所喜欢的贴吧,本软件与<百度贴吧自动签到器>不同之处在于本软件使用WAP方式进行签到,可享有手机签到享受1.5倍...
<6>、群组等级默认人数,这个可以从等级组(等级)管理中对群组设置进行设置。 <7>、设置群组热贴,即为当然一个贴子点击超过这个数值时,会显示为热贴。 (8)上传选项设置:(非常重要) <1>、上传组件...
googleAuthenticator windows版 googleAuth winAuth win10版 谷歌双向认证win版程序
在网上看到一个图片验证码,挻漂亮的,但是取回来发现,好像有点小问题,还是改为自己的口味吧,很多时候,如果无法使用,应该是字体的问题。程序所用的字体win7 自带的,需要上传到web目录
2.Api_Win32_Mac类工具包 3.在c#程序中放音乐的帮助类 GDI+相关,图像相关 1.生成缩略图的类文件SmallImage C#基础类库 1.Chart图形 Assistant创建显示图像的标签和文件 OWCChart统计图的封装类 2.Cookie&Session;...
目前是测试版本,故未接入短信平台,所以手机是收不到验证码的,直接点获取验证码就已经填上了 如需在微信中体验完整功能,请联系文末的邮箱,注明理由和微信号申请体验权限 使用过程遇到的坑丶记录 背景图不生效...
通过python操作同花顺客户端下单程序。 使用环境: 电脑系统win7 python2.7 pywinauto0.6.5 同花顺网上股票交易系统5.0环境下测试通过。