画画之前要先做准备工作,见上一篇说明
设置线,就是创建个画笔,代表画框线的东西
{这里是准备工作代码} ======= 后面全部需要,以后就不再写了
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,真的很多很多,以上介绍的最常用的。