一个生成公章图片地简易工具
本例的运行结果图如下

一、功能与原理
学习VC也没多久,将我做的这个小工具和大家分享一下。其主要功能就是可以自定义生成公章图形并保存为bmp图片,希望对大家有点用。具体实现的方法如下:
步骤一:生成对话框工程,并加入相应的控件,图片的显示使用Picture控件;
步骤二:定义生成图形所需要的参数;
步骤三:通过参数定义,生成对应的Bitmap,再在Picture控件中显示该位图,具体实现参看源程序。
步骤四:将生成的Bitmap保存为位图文件。
二、程序实现的关键点
(一)、需要对LOGFONT、LOGPEN和LOGBRUSH结构很了解,并能灵活应用,特别是在排列字体的过程中,对字体的旋转角度以及定位点的设置。
//绘制图章基本图形void CMakeSealDlg::DrawSeal(CDC * MemDC){int cx = 100;int cy = 100;POINT point;point.x = point.y = 5;LOGPEN logPen;logPen.lopnColor = ChooseColor(&m_nRadioColor);//绘制背景logPen.lopnStyle = PS_NULL;logPen.lopnWidth = point;(*MemDC).SelectObject(CreatePenIndirect(&logPen));(*MemDC).Rectangle(0,0,200,200);//设置绘笔logPen.lopnStyle = PS_SOLID;(*MemDC).SelectObject(CreatePenIndirect(&logPen));//设置填充LOGBRUSH logBrush;logBrush.lbStyle = BS_HOLLOW;logBrush.lbColor = RGB(255, 0, 0);(*MemDC).SelectObject(CreateBrushIndirect(&logBrush));//绘制外圆(*MemDC).Ellipse(cx - m_nRadius, cy - m_nRadius, cx + m_nRadius, cy + m_nRadius);} (二)、在显示预览时,通过使用 Picture 控件对内存中Bitmap的调用,可有效地防止因重绘造成的屏幕闪烁。
(1)创建位图
void CMakeSealDlg::CreateBmp(CBitmap *bitmap){CClientDC dc(this);//设置内存中CDCCDC MemDC;//创建相容的Bitmap和DCbitmap->CreateCompatibleBitmap(&dc, 198, 198);MemDC.CreateCompatibleDC(&dc);MemDC.SelectObject(bitmap);//在内存DC中绘制图章DrawSeal(&MemDC);DrawSealText(&MemDC);DrawSubText1(&MemDC);DrawSubText2(&MemDC);//判断是否绘制五角星if(m_bShowTri){DrawTri(&MemDC);}//将创建图片保存在内存中MemDC.SelectObject(bitmap);MemDC.DeleteDC();} (2)改变参数调用重绘函数
//改变主字体宽度void CMakeSealDlg::OnChangeMainWidth() {UpdateData(TRUE);CSpinButtonCtrl*pSpin= (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_MAIN_WIDTH);pSpin->SetPos(m_nMainWidth);UpdateShow( );} (3) 重绘picture
void CMakeSealDlg::UpdateShow(){//删除过期的图形m_pBitmap.DeleteObject();//创建新的图形CreateBmp(&m_pBitmap);//在picture控件中显示位图m_picture.SetBitmap((HBITMAP)m_pBitmap.Detach());} (三)、保存位图文件详细见源文件,网上有很多详细的介绍,也可以参看MSDN,这里就不多讲了。
三、总结
这是我用VC做的第一个小程序,中间难免会有一些错误,另外保存图片的类型还没有完善,感兴趣的朋友也可继续扩展。总的来说,这个程序在逻辑字体、Spin控件、位图的应用上做了一个总体的概括,比较适合像我这样的新手借鉴学习。赫赫,有什么问题也可以给我来信联系 。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
