为什么AutoRedraw为true时,bitblt画不上Private Sub Command1_Click()Picture2.AutoRedraw TrueBitBlt P
为什么AutoRedraw为true时,bitblt画不上
Private Sub Command1_Click()
Picture2.AutoRedraw = True
BitBlt Picture2.hdc, 0, 0, Picture1.Width, Picture1.Height, Picture1.hdc, 0, 0, SRCCOPY
Picture2.AutoRedraw = False
End Sub
真是奇怪啊,以前没发现
去掉 Picture2.AutoRedraw = True 却能画出来
[解决办法]
AutoRedraw = True 后采用双缓冲绘图,不调用 VB 的绘图方法就不会刷新到界面。
加上用 Refresh 强制刷新试试
- VB code
BitBlt Picture2.hdc, 0, 0, Picture1.Width, Picture1.Height, Picture1.hdc, 0, 0, SRCCOPY Picture2.Refresh
[解决办法]
1.如果你要用 SrcCopy 则需加上常量宣告 Const SRCCOPY = &HCC0020
直接使用VbSrcCopy即可.
2.Bitblt来源如果为不可见(在窗体外或被遮盖),必需将AutoRedraw设为True
3.BitBlt这个API使用的座标与图片尺寸都是用象素的,如果你的Picture1或Picture2的ScaleMode没有设定为3 则你必需将座标与图片尺寸都要除上15(Screen.TwipsPerPixelX 或Screen.TwipsPerPixelY)
Private Sub Command1_Click()
Picture2.AutoRedraw = True
BitBlt Picture2.hDC, 0, 0, 250, 350, Picture1.hDC, 0, 0, vbSrcCopy
Picture2.Refresh
SavePicture Picture2.Image, AppDisk & "tt.bmp"
MsgBox "保存完成!"
End Sub
