首页新闻找找看学习计划

用VB6.0开发的软件,在Win 7中运行BitBlt(API)函数的问题

0
悬赏园豆:5 [待解决问题]

我用VB6.0在Windows XP中开发了球在球场中运动并保存图片的软件。打包、安装后在Windows XP中运行正常。但安装在Windows 7中运行时,保存的图片出现了问题。特请教VB的朋友。
图片中的球(位图)是用API函数实现的,语句如下:

1 dc0(Index + 1) = GetDC(ShapeLabel1(Index).hwnd)     '获得球 的显示句柄。
2 BitBlt Picture1.hdc, QiuHaoX(Index + 1) / Screen.TwipsPerPixelX, QiuHaoY(Index + 1) / Screen.TwipsPerPixelY, Me.ShapeLabel1(Index).Width / Screen.TwipsPerPixelX, Me.ShapeLabel1(Index).Height / Screen.TwipsPerPixelY, dc0(Index + 1), 0 / Screen.TwipsPerPixelX, 600 / Screen.TwipsPerPixelY, &HCC0020   '把球位图合并到球场得到整体位图。
3 ReleaseDC ShapeLabel1(Index).hwnd, dc0(Index + 1)   '释放设备场景
View Code

各种运行,保存的第一张图片,图片中的球显示正常。见下图:
1-1-0-1.jpg

两种运行,从第二张开始,保存的图片中的球是黑块或白块。见下图:
其中一种运行, 图片中的球是黑块(从第二张开始):
1-2-1-4.jpg

  另一种运行,图片中的球是白块(从第二张开始):
1-2-1-4 (2).jpg

我的理解是:球场是由Picture图片框用Line函数画线形成,是位图。

ShapeLabel1(Index)是由控件产生的一个球,是一个窗口,不是位图。要通过API函数把球转化成位图后合并到球场,得到整体位图。
dc0(Index + 1) = GetDC(ShapeLabel1(Index).hwnd)是获得球 的显示句柄。
BitBlt Picture1.hdc, QiuHaoX(Index + 1) / Screen.TwipsPerPixelX, QiuHaoY(Index + 1) / Screen.TwipsPerPixelY, Me.ShapeLabel1(Index).Width / Screen.TwipsPerPixelX, Me.ShapeLabel1(Index).Height / Screen.TwipsPerPixelY, dc0(Index + 1), 0 / Screen.TwipsPerPixelX, 600 / Screen.TwipsPerPixelY, &HCC0020是把球位图合并到球场得到整体位图。
ReleaseDC ShapeLabel1(Index).hwnd, dc0(Index + 1)是释放设备场景
为什么在Windows XP中运行正常而在Windows 7中运行就不正常呢?从表面现象看,好象第二张图片(以后的图片也这样)中的球未画入Picture1.hdc(内存设备场景)。Windows 7在什么洋的情况下,Picture1.hdc(内存设备场景)内的图像会显示黑块或白块(是否为0或1)?Windows 7是否需要用其他的什么函数把图像写到Picture1.hdc(内存设备场景)内呢?
感谢回复!

公羊的主页 公羊 | 菜鸟二级 | 园豆:260
提问于:2013-05-27 09:17
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册