窗口保存及恢复,为什么窗口最后一列无法恢复呢?
<P>XMS申请内存已解决。窗口保存及恢复,为什么窗口最后一列无法恢复呢?以下为源程序<BR><BR>int POPUP_x1, POPUP_x2,POPUP_y1,POPUP_y1;//窗口坐标(以像素素为单位)<BR>char XMSBuffer[800];<BR>/*-----------------------------------------------------------<BR>//保存窗口映像到XMS<BR>-----------------------------------------------------------*/<BR>void _Cdecl Save_Image_XMS(void)<BR>{<BR> int i, j;<BR> unsigned int size;<BR> long long_size;<BR> unsigned long offset = 0;<BR> char *pp;</P><P> long_size = ((long)POPUP_x2-(long)POPUP_x1+1)*<BR> ((long)POPUP_y2-(long)POPUP_y1+1);<BR> long_size = long_size/1024+1;<BR> size = long_size; //被窗口遮盖区域需要的KB数<BR> if (XMS_Size() > size) // 如果可XMS可用空间大于窗口区域所需的空间<BR> {<BR> if ((xms_window_handle = XMS_Alloc(size)) != 0) // 申请相应空间<BR> { <BR> size = POPUP_x2 - POPUP_x1;<BR> for (i = POPUP_y1 ; i <= POPUP_y2 ; i++)//窗口列坐标循环<BR> {<BR> pp = XMSBuffer; // 缓冲区指针指向缓冲区<BR> for (j = POPUP_x1 ; j <= POPUP_x2 ; j++) // 窗口行坐标循环<BR> *pp++ = getpixel(j,i);<BR> Write_To_XMS(XMSBuffer,size,xms_window_handle,offset);//读一行后送到XMS<BR> offset += size;<BR> }<BR> }<BR>}</P>
<P>/*-----------------------------------------------------------<BR>//恢复窗口映像从XMS<BR>-----------------------------------------------------------*/<BR>void _Cdecl Restore_Image_XMS(void)<BR>{<BR> int i, j;<BR> unsigned short size;<BR> unsigned long offset = 0;<BR> char *pp;</P>
<P> for (i = POPUP_y1 ; i <= POPUP_y2 ; i++)<BR> {<BR> size = POPUP_x2 - POPUP_x1;<BR> Read_From_XMS(XMSBuffer,size,xms_window_handle,offset);//从XMS读一行屏幕内容到缓冲区XMSBuffer中。<BR> offset += size;<BR> pp = XMSBuffer;<BR> for (j = POPUP_x1 ; j <= POPUP_x2 ; j++)<BR> putpixel(j,i,*pp++);<BR> }<BR> XMS_Free(xms_window_handle);//释放<BR>}<BR></P>
页:
[1]
