生成随机验证码,显示在CStatic控件上

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值