今天第二件任务是完成了:验证码
说明:验证码的上面显示的数字是 单个的,是static picture 控件,不是静态文本控件。
做法:
1,添加资源,添加0-9十个数字的icon图标到资源上面,注意,这个图标是有16*16的 和32*32的 后面这种图标大些,画图的时候要注意自己是画了那种icon
2 加载图标icon ,放入hicon类型的 一个数组中间;
m_icon[0] = (HICON)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON0), IMAGE_ICON, 32, 32, 0);
m_icon[1] = (HICON)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 32, 32, 0);
m_icon[2] = (HICON)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON2), IMAGE_ICON, 32, 32, 0);
m_icon[3] = (HICON)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON3), IMAGE_ICON, 32, 32, 0);
m_icon[4] = (HICON)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON4), IMAGE_ICON, 32, 32, 0);
m_icon[5] = (HICON)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON5), IMAGE_ICON, 32, 32, 0);
m_icon[6] = (HICON)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON6), IMAGE_ICON, 32, 32, 0);
m_icon[7] = (HICON)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON7), IMAGE_ICON, 32, 32, 0);
m_icon[8] = (HICON)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON8), IMAGE_ICON, 32, 32, 0);
m_icon[9] = (HICON)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON9), IMAGE_ICON, 32, 32, 0);
这里加载的是32*32的图标
3 添加 4个picture control 用来显示随机的数字,并添加 控件类型的变量;添加一个eidt编辑框,并添加一个控件类型的 变量;添加一个 按钮控件,用来 字迹不清晰,重新发验证码。
CEdit m_edit;
CButton myBitmapButton;
CStatic m_s4;
CStatic m_s3;
CStatic m_s2;
CStatic m_s1;
4. 下面是随机产生数字,并把对应的数字显示到 icon上面
随机产生数字用到了 srand 和rand
srand((int)time(NULL)); //srand为rand产生一个种子,time()产生一个字1970年到现在的一共的时间秒
a=rand()%10;产生一个0——9的随机数字
if(a==0) //如果首位为0的话,判断的时候会出错,如0123 !=123
{
a=8;
}只要首位产生了0,我就把他设置为8 ,吉利点
num=a*1000;因为是四个图片,第一出来的数字为千位数
m_s1.SetIcon(m_icon[a]);a=rand()%10;num+=a*100;百位数
m_s2.SetIcon(m_icon[a]);a=rand()%10;num+=a*10;十位数
m_s3.SetIcon(m_icon[a]);a=rand()%10;num+=a;个位数
m_s4.SetIcon(m_icon[a]);
seticon函数是 选择把icon里面的 图片添加到picture control 控件里面去,如果a= o,那么我就添加 icon0 这个icon,上面画的字也是0;
5判断 用户填入的字是否和 图片的字相等
图片的字 对应的存到了 num中间了
所以只要判断num和输入进来的字就可以了】
ss.Format("%d",num);
CString text;
m_edit.GetWindowText(text);
if(text==ss){MessageBox("确认成功!!");//PostMessage(WM_CLOSE);
}
else {MessageBox("验证码错误","验证码确认",MB_ICONSTOP);//最后一格参数是一个警告的图标
}
}
注意: 图片画的时候有32*32 HE 16*16之分
int转为字符串 是这样子转的 cstring str;int n;str。format(“%d”,n);