level 13
Option Explicit
Private pic As StdPicture
Private Sub Form_Load()
Set pic = LoadPicture("图片路径") '加载图片
'方法一:
Call Me.PaintPicture(pic, 0, 0, 100, 100) '用PaintPicture绘制图片
'方法二:
'如果要透明,要用SelectObject先入pic.Handle,然后用GdiTransparentBlt绘制
Call SelectObject(Picture1.hDC, pic.Handle) '将图片句柄选入Picture1.hDC
Call GdiTransparentBlt(Me.hDC, 100, 330, 30, 36, Picture1.hDC, 0, 0, 30, 36, &HFFFF99)
'方法三:不要PictureBox可以用CreateCompatibleDC
Dim hDCMem As Long
Dim hBmpOld As Long
hDCMem = CreateCompatibleDC(Me.hDC) '创建内存DC
hBmpOld = SelectObject(hDCMem, pic.Handle) '将图片句柄选入内存DC
Call GdiTransparentBlt(Me.hDC, 100, 330, 30, 36, hDCMem, 0, 0, 30, 36, &HFFFF99) '将内存DC中的图片绘制到Me.hDC(就是窗体上)
Call SelectObject(hDCMem, hBmpOld) '选入原hBmp
Call DeleteDC(hDCMem) '删除DC
End Sub
2020年05月29日 09点05分
6
还是大佬厉害
2020年05月29日 09点05分
level 13
还有这样调用API比较麻烦,要声明API,可以在网上找windowsAPI.tlb,引用这个tlb可以免去API声明,而且调用相同的API速度提升1.5倍左右(API调用开消省了),对于绘图反复调用API还是有用的。手动声明的API调用时要先调用VB的DllFunctionCall,再由DllFunctionCall调用系统API,而引用tlb就不需要DllFunctionCall
2020年05月30日 08点05分
7