void CSoftKeyboardDlg::OnBnClickedButton3()
{
//获取随机验证码
CString strText;
int iRand = rand() % 26;
TCHAR sc1 = 97 + iRand;
TCHAR sc2 = 122 - iRand;
iRand = rand() % 26;
TCHAR sc3 = 90 - iRand;
iRand = rand() % 10;
TCHAR sc4 = 48 + iRand;
iRand = rand() % 10;
TCHAR sc5 = 57 - iRand;
strText += sc1;
strText += sc4;
strText += sc2;
strText += sc3;
strText += sc5;
//绘制在位图上
CRect rcPhoto(0, 0, 120, 60);
CDC* pdc = GetDC();
CBitmap bm;
int Width = rcPhoto.Width();
int Height = rcPhoto.Height();
bm.CreateCompatibleBitmap(pdc, Width, Height);
CDC tdc;
tdc.CreateCompatibleDC(pdc);
CBitmap*pOld = tdc.SelectObject(&bm);
tdc.FillRect(rcPhoto, WHITE_BRUSH);
for (int i = 0; i < strText.GetLength(); i++)
{
CFont l_font;
LOGFONT LogFnt = { //定义新的字体
24, //字体高度为30
0, //字体宽度为24
-100, //文本不倾斜
0, //字体的粗细度
FW_HEAVY, //FW_HEAVY为最粗
1, //字体为斜体
1, //输出时带下划线
0, //无删除线
ANSI_CHARSET, //所用字符集为ANSI_CHARSET
OUT_DEFAULT_PRECIS, //输出精度为默认精度
CLIP_DEFAULT_PRECIS, //裁剪精度为默认精度
DEFAULT_QUALITY, //输出质量为默认值
DEFAULT_PITCH, //字间距使用默认值
_T("Arial") //匹配的字体
};
l_font.CreateFontIndirect(&LogFnt);
CFont* l_old_font = tdc.SelectObject(&l_font);
int iR, iG, iB;
iR = iG = iB = 0;
iR = rand() % 256;
iG = rand() % 256;
iB = rand() % 256;
tdc.SetTextColor(RGB(iR, iG, iB));
CString str(strText.GetAt(i));
tdc.TextOut(5 + 24 * i, 5 + 2 * i, str);
CPen pen1;
CPen *oldPen;
pen1.CreatePen(PS_DASH, 1, RGB(iB, iR, iG));//创建对象
oldPen = tdc.SelectObject(&pen1);//将画笔选入设备描述表,并保存旧的画笔
tdc.MoveTo(5 + 24 * i + 2, 5 + 2 * i + rand() % 32);
tdc.MoveTo(5 + 24 * i + 2, 5 + 2 * i + rand() % 32);
tdc.LineTo(5 + 24 * (i + 1) + rand() % 12, 5 + 2 * (i + 1) + 12);
tdc.SelectObject(oldPen);//将以前的画笔选入设备描述表
pen1.DeleteObject();
tdc.SelectObject(l_old_font);
// Delete the font object.
l_font.DeleteObject();
}
tdc.SelectObject(pOld);
ReleaseDC(&tdc);
//将位图显示在控件上
CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC1);
pStatic->ModifyStyle(0xF, SS_BITMAP | SS_CENTERIMAGE);
pStatic->SetBitmap(bm);
}
生成随机验证码,显示在CStatic控件上
最新推荐文章于 2023-11-27 09:26:13 发布