我用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) '释放设备场景
各种运行,保存的第一张图片,图片中的球显示正常。见下图:
两种运行,从第二张开始,保存的图片中的球是黑块或白块。见下图:
其中一种运行, 图片中的球是黑块(从第二张开始):
另一种运行,图片中的球是白块(从第二张开始):
我的理解是:球场是由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(内存设备场景)内呢?
感谢回复!