畫畫之前要先做準備工作,見上一篇說明
設置線,就是創建個畫筆,代表畫框線的東西
{這里是準備工作代碼} ======= 后面全部需要,以后就不再寫了
Dim hOldPen As HGDIOBJ
nPen = CreatePen(樣式, 寬度, 顏色) '創建新畫筆
hOldPen = SelectObject(m_Dc, nPen) '畫筆存入DC
DeleteObject hOldPen '銷毀舊的畫筆
{這里是清理工作代碼} ========== 后面全部需要,以后就不再重復寫了
'nPenStyle ------ Long,指定畫筆樣式,可以是下述常數之一
'PS_SOLID 畫筆畫出的是實線
'PS_DASH 畫筆畫出的是虛線(nWidth必須不大于1)
'PS_DOT 畫筆畫出的是點線(nWidth必須不大于1)
'PS_DASHDOT 畫筆畫出的是點劃線(nWidth必須不大于1)
'PS_DASHDOTDOT 畫筆畫出的是點-點-劃線(nWidth必須不大于1)
'PS_NULL 畫筆不能畫圖
'PS_INSIDEFRAME 由橢圓、矩形、圓角矩形、餅圖以及弦等生成的封閉對象框時,畫線寬度向內擴展。如指定的準確RGB顏色不存在,就進行抖動處理
==========FB類調用例題=========================
Dim gg As yGDI = 句柄
gg.Pen(寬度,顏色)
設置填充,就是創建刷子,用來填充
Dim hOldBrush As HGDIOBJ
1,2選1 nBrush = CreateSolidBrush(顏色) ‘設置填充的顏色’
2,2選1 nBrush = GetStockObject(HOLLOW_BRUSH) ‘不想填充顏色,就用這個’
hOldBrush = SelectObject(m_Dc,nBrush )
DeleteObject hOldBrush
畫線條
{這里是設置線條屬性}
MoveToEx m_Dc,X1,Y1,null '設置起點
LineTo m_Dc,X2,Y2 '畫到終點
==========FB類調用例題=========================
gg.Pen(2,&HFF1FE0)
gg.DrawLine(10, 10, 70, 90)
畫多條連續的線條
LineTo m_Dc,X2,Y2 '多次設置終點
==========FB類調用例題=========================
gg.DrawPolyline (5 ,10, 10, 50, 50,50,100,150,20,100,100)
畫框,畫矩形,畫長方形
{設置框線} 不設置,就是默認的,就是上次用過的
{設置填充} 不設置,就是默認的,就是上次用過的
Rectangle m_Dc, X , Y , (X + W) , (Y + H) '畫框API
==========FB類調用例題=========================
gg.DrawFrame(10, 10, 70, 90)
畫圓角矩形
RoundRect m_Dc, X , Y , (X + W) , (Y + H) ,圓角寬度,圓角高度
==========FB類調用例題=========================
gg.DrawCircleFrame(10, 10, 70, 90, 35, 35)
畫橢圓
Ellipse m_Dc, X , Y , (X + W) , (Y + H)
繪畫字符
TextOut m_Dc, X , Y , StrPtr(nText),Len(nText)
描邊字,輪廓字
{這里是設置線條屬性}
BeginPath(m_Dc) ';//開始軌跡
TextOut m_Dc, X , Y , StrPtr(nText), Len(nText)
EndPath(m_Dc) ';//結束軌跡
StrokePath(m_Dc) ' ; //畫出軌跡
TextOut m_Dc, X , Y , StrPtr(nText), Len(nText) '再畫字
設置文字顏色和背景
SetTextColor m_Dc, tColor
If bColor = -1 Then
SetBkMode m_Dc, TRANSPARENT '不畫文字的背景色,設置這個后,畫上的字是透明的
Else
SetBkMode m_Dc, OPAQUE '在繪制文本的背景顏色。
SetBkColor m_Dc, bColor ‘設置字的背景色’
End If
將指定的矩形中像素顏色翻轉,就是反色
Dim rr As rect
SetRect @rr, x , y , (x + w) , (y + h)
InvertRect m_Dc, @rr
畫資源里的圖標
Dim hbmp As HICON = LoadIcon(模塊地址,資源名)
If hbmp Then
DrawIconEx m_Dc, x , y , hbmp, w , h , Null, Null, DI_NORMAL
DeleteObject hbmp
End If
畫資源里的圖片
Dim hbmp As HANDLE= LoadImage(模塊地址,"資源里的名稱", IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR)
If hbmp Then
DrawState m_Dc,0,0,hbmp ,0,x,y,w,h,DST_BITMAP
DeleteObject hbmp
End If
拷貝圖片
'rop 光柵操作代碼
'BLACKNESS:表示使用與物理調色板的索引0相關的色彩來填充目標矩形區域,(對缺省的物理調色板而言,該顏色為黑色)。
'DSTINVERT:表示使目標矩形區域顏色取反。
'MERGECOPY:表示使用布爾型的And(與)操作符將源矩形區域的顏色與特定模式組合一起。
'MERGEPAINT:通過使用布爾型的Or(或)操作符將反向的源矩形區域的顏色與目標矩形區域的顏色合并。
'NOTSRCCOPY:將源矩形區域顏色取反,于拷貝到目標矩形區域。
'NOTSRCERASE:使用布爾類型的Or(或)操作符組合源和目標矩形區域的顏色值,然后將合成的顏色取反。
'PATCOPY:將特定的模式拷貝到目標位圖上。
'PATPAINT:通過使用布爾Or(或)操作符將源矩形區域取反后的顏色值與特定模式的顏色合并。然后使用Or(或)操作符將該操作的結果與目標矩形區域內的顏色合并。
'PATINVERT:通過使用Xor(異或)操作符將源和目標矩形區域內的顏色合并。
'SRCAND:通過使用And(與)操作符來將源和目標矩形區域內的顏色合并。
'SRCCOPY:將源矩形區域直接拷貝到目標矩形區域。
'SRCERASE:通過使用And(與)操作符將目標矩形區域顏色取反后與源矩形區域的顏色值合并。
'SRCINVERT:通過使用布爾型的Xor(異或)操作符將源和目標矩形區域的顏色合并。
'SRCPAINT:通過使用布爾型的Or(或)操作符將源和目標矩形區域的顏色合并。
'WHITENESS:使用與物理調色板中索引1有關的顏色填充目標矩形區域。(對于缺省物理調色板來說,這個顏色就是白色)。
DIM BbDc as hDc =GetDC(0) '獲取桌面DC
StretchBlt(m_Dc, xDest , yDest , wDest , hDest , BbDc, xSrc , ySrc , wSrc , hSrc , 光柵操作代碼) ‘將桌面圖拷貝到窗口’
ReleaseDC 0,BbDc ‘清理DC’
半透明拷貝圖片
Dim ftn As BLENDFUNCTION
ftn.BlendOp =0 '這個參數必須也只能為AC_SRC_OVER(0x00),意思就是把源圖片覆蓋到目標之上.
ftn.BlendFlags=0 '必須為0
ftn.SourceConstantAlpha =124 '簡寫為SCA,指定源圖片的透明度,這個值是會和源圖片的Alpha通道值合并計算的.,0為完全透明,255為完全不透明
ftn.AlphaFormat =0 '可以填兩種,一種是0x00,一種是AC_SRC_ALPHA(0x01).
DIM BbDc as hDc =GetDC(0) '獲取桌面DC
AlphaBlend (m_Dc, xDest , yDest , wDest , hDest , BbDc, xSrc , ySrc , wSrc , hSrc , ftn)
ReleaseDC 0,BbDc ‘清理DC’
扣色拷貝圖片
'tColor 將源位圖中的RGB顏色視為透明,扣除此色
DIM BbDc as hDc =GetDC(0) '獲取桌面DC
TransparentBlt (m_Dc, xDest , yDest , wDest , hDest , BbDc, xSrc , ySrc , wSrc , hSrc , tColor)
ReleaseDC 0,BbDc ‘清理DC’
像素點顏色設置與獲取
SetPixel
GetPixel
更多 GDI 的API 見 MSDN,真的很多很多,以上介紹的最常用的。