程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 一個生成公章圖片的簡易工具

一個生成公章圖片的簡易工具

編輯:關於VC++

本例的運行結果圖如下

一、功能與原理

學習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) 重繪picturevoid CMakeSealDlg::UpdateShow()
{
    //刪除過期的圖形
    m_pBitmap.DeleteObject();
    //創建新的圖形
       CreateBmp(&m_pBitmap);
    //在picture控件中顯示位圖
    m_picture.SetBitmap((HBITMAP)m_pBitmap.Detach());
}

(三)、保存位圖文件詳細見源文件,網上有很多詳細的介紹,也可以參看MSDN,這裡就不多講了。

三、總結

這是我用VC做的第一個小程序,中間難免會有一些錯誤,另外保存圖片的類型還沒有完善,感興趣的朋友也可繼續擴展。總的來說,這個程序在邏輯字體、Spin控件、位圖的應用上做了一個總體的概括,比較適合像我這樣的新手借鑒學習。赫赫,有什麼問題也可以給我來信聯系 。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved