BOOL vIsible, y Visible: HDC HFILE ∥出现对话框,输入ⅹ偏移量 XOffset,和y偏移量 yOffset dIglnput Box=(DLGPROC) Make Proclnstance((FARPROC)Input Box, ghlnst ) Dialog Box(ghInst, "INPUTBOX",hWnd, dIglnput Box) FreeProclnstance((FARPROC)dIglnput Box ) OffBits为 BITMAPINFOHEADER结构长度加调色板的大小 OffBits=bf. bfOffBits-sizeof( BITMAPFILEHEADER) Bufsizes= OffBits+ bi. biHeight*LineBytes,/要开的缓冲区的大小 ∥新产生的位图分配缓冲区内存 if(hTemplmg Data=Local Alloc(LHND, BufSize))==NULL Message Box(hWnd, Error alloc memory! ", "Error Message", MB OK MB ICONEXCLAMATION) return false;∥失败,返回 IpIng Data为指向原来位图数据的指针 Iplmg Data=(LPBITMAPINFOHEADER)GlobalLock(hlmg Data) pTemplmg Data为指向新产生位图数据的指针 IpTemplmg Data=(LPBITMAPINFOHEADER)I ock(tEmp lpPtr(char *)lplmg Data lpTempPtr=(char *)Ip Data ∥将新的缓冲区中的每个字节都填成255,这样以后未处理的象素就是白色 memset(lpTempPtr, (BYTE)255, BufSize) ∥两幅图之间的头信息,包括调色板都是相同的,所以直接拷贝头和调色板 memcpy(lp TempPtr, IpPtr, OffBits); ∥ Visible为 FALSE时,表示x方向已经移出了可显示的范围 vIsible=trUe if( xOffset<=-bi bi Width) xVisiblesfalsI else if( xOffset<=0)1 DsXO=0,∥表示移动后,有图区域的左上角点的x坐标 DsX1=bi. bi width+ xOffset示移动后,有图区域的右下角点的x坐标 else if( xOffset<bi bi width)t DstXo=xoffsetBOOL xVisible,yVisible; HDC hDc; HFILE hf; int i; //出现对话框,输入 x 偏移量 xOffset,和 y 偏移量 yOffset dlgInputBox = (DLGPROC) MakeProcInstance ( (FARPROC)InputBox,ghInst ); DialogBox (ghInst, "INPUTBOX", hWnd, dlgInputBox); FreeProcInstance ( (FARPROC) dlgInputBox ); //OffBits 为 BITMAPINFOHEADER 结构长度加调色板的大小 OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER); BufSize=OffBits+bi.biHeight*LineBytes;//要开的缓冲区的大小 //为新产生的位图分配缓冲区内存 if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL) { MessageBox(hWnd,"Error alloc memory!","Error Message",MB_OK| MB_ICONEXCLAMATION); return FALSE; //失败,返回 } //lpImgData 为指向原来位图数据的指针 lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData); //lpTempImgData 为指向新产生位图数据的指针 lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData); lpPtr=(char *)lpImgData; lpTempPtr=(char *)lpTempImgData; //将新的缓冲区中的每个字节都填成 255,这样以后未处理的象素就是白色 memset(lpTempPtr,(BYTE)255,BufSize); //两幅图之间的头信息,包括调色板都是相同的,所以直接拷贝头和调色板 memcpy(lpTempPtr,lpPtr,OffBits); //xVisible 为 FALSE 时,表示 x 方向已经移出了可显示的范围 xVisible=TRUE; if( xOffset<= -bi.biWidth ) xVisible=FALSE; else if( xOffset<=0){ DstX0=0; //表示移动后,有图区域的左上角点的 x 坐标 DstX1=bi.biWidth+xOffset; //表示移动后,有图区域的右下角点的 x 坐标 } else if ( xOffset<bi.biWidth){ DstX0=xOffset;