新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论高级C/C++编程、代码重构(Refactoring)、极限编程(XP)、泛型编程等话题
    [返回] 计算机科学论坛计算机技术与应用『 C/C++编程思想 』 → 一个生成公章图片地简易工具 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 9849 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 一个生成公章图片地简易工具 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 C/C++编程思想 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客楼主
    发贴心情 一个生成公章图片地简易工具

    本例的运行结果图如下

    按此在新窗口浏览图片

    一、功能与原理
        学习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);

           //设置内存中CDC

           CDC MemDC;

           //创建相容的Bitmap和DC

           bitmap->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控件、位图的应用上做了一个总体的概括,比较适合像我这样的新手借鉴学习。


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/4/17 14:23:00
     
     hmpzz 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:2
      积分:60
      门派:XML.ORG.CN
      注册:2008/4/18

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给hmpzz发送一个短消息 把hmpzz加入好友 查看hmpzz的个人资料 搜索hmpzz在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看hmpzz的博客2
    发贴心情 
    不错噢,入门的好东东,可是为什么我下不来??

    已经下来了,谢谢楼主的共享

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/4/18 16:29:00
     
     para_zhang 美女呀,离线,快来找我吧!
      
      
      等级:大一(猛啃高等数学)
      文章:9
      积分:123
      门派:XML.ORG.CN
      注册:2008/4/22

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给para_zhang发送一个短消息 把para_zhang加入好友 查看para_zhang的个人资料 搜索para_zhang在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看para_zhang的博客3
    发贴心情 
    l楼主太有才了
    下载了,很欣赏,谢谢楼主
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/4/26 22:40:00
     
     sytyong 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:14
      积分:115
      门派:IEEE.ORG.CN
      注册:2008/3/27

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给sytyong发送一个短消息 把sytyong加入好友 查看sytyong的个人资料 搜索sytyong在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看sytyong的博客4
    发贴心情 
    顶 虽然是个小程序 但楼主能拿出来共享 值得学习
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/5/4 22:20:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 C/C++编程思想 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/11/23 4:43:11

    本主题贴数4,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    109.375ms