⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myproject.cpp

📁 采用Platform Builder编写的多线程程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:

	     if ( (HANDLE)lParam != INVALID_HANDLE_VALUE )
		 {
		         //graphics file
		         ReadFile( (HANDLE)lParam, szBuffer, dwBufferMax, &dwNumberOfBytesRead, NULL );
		 }
	    else
		{
	     	return 0;
		}
           return dwNumberOfBytesRead;
          // return amount read
}



//-------------------------  fImageProgress-------------------------------
static void CALLBACK ImageProgress( IImageRender *pRender, BOOL bComplete, LPARAM lParam )
{
     if( bComplete )
	{
		;//Do whatever when done processing the image
	}
}

//              以上为JPEG解压函数  
/////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////





///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
//                       以下为图像漫游函数
//  
//--------------   fMakePicName-----------------------------------------------------
void MakePicName(int intXnumth,int intYnumth,int LeftRight,int UpDown)//leftright  在目标图的左为负,0为目标图同列,右为正;updown上为正,0为目标图同行,下为负
{
   

	lstrcpy(StrPicName0,PrePicName);//为图像文件名赋前缀名
	switch(LeftRight)
	{
	    case -2:  lstrcat(StrPicName0, intToTCHAR(intXnumth-2,2));break;//xName
	    case -1:  lstrcat(StrPicName0, intToTCHAR(intXnumth-1,2));break;//xName
	    case 0:   lstrcat(StrPicName0, intToTCHAR(intXnumth,2));break;//xName
	    case 1:   lstrcat(StrPicName0, intToTCHAR(intXnumth+1,2));break;//xName
	    case 2:   lstrcat(StrPicName0, intToTCHAR(intXnumth+2,2));break;//xName
	}

	switch(UpDown)
	{
			   case -2:lstrcat(StrPicName0 , intToTCHAR(intYnumth-2,3));break;//yName
			   case -1:lstrcat(StrPicName0 , intToTCHAR(intYnumth-1,3));break;//yName
			   case 0:lstrcat(StrPicName0 , intToTCHAR(intYnumth,3));break;//yName
			   case 1:lstrcat(StrPicName0 , intToTCHAR(intYnumth+1,3));break;//yName
			   case 2:lstrcat(StrPicName0 , intToTCHAR(intYnumth+2,3));break;//yName
	}
	if(PicType==1){lstrcat(StrPicName0 , TEXT(".bmp"));}
	else {lstrcat(StrPicName0 , TEXT(".jpg"));}


}







//---------------fRePicAndBoxPosition----------------------------------------------------------------------------
void RePicAndBoxPosition(POINT Center)//重新确定picbox和目标图的位置
{
	//
    int	intXnumth = Center.x/picWidth;//取整
    int intYnumth = Center.y/picHeight;

	//以下8个为相对于大图左下角(0,0)的象素位置
    pic.left = intXnumth * picWidth;
    pic.bottom = intYnumth * picHeight;
    pic.right = pic.left + picWidth;
    pic.top = pic.bottom + picHeight;

    box.top = Center.y + PicBoxHeight/2;
    box.bottom = Center.y - PicBoxHeight/2;
    box.left = Center.x - PicBoxWidth/2;
    box.right = Center.x + PicBoxWidth/2;  
}

//------------fReNotLoadBoxPosition-------------------------------------
void ReNotLoadBoxPosition(POINT Center,RECT pic)
{

	//

	//注:运行此函数前,必须先计算目标图 Pic的位置
	switch(WhereIsCenterAtPic(Center,pic))
	{
	    case 1:
			NotLoadBox.top=pic.top+picHeight;
			NotLoadBox.bottom=pic.bottom;
			NotLoadBox.left=pic.left-picWidth;
			NotLoadBox.right=pic.right;
			break;
		case 2:
			NotLoadBox.top=pic.top+picHeight;
			NotLoadBox.bottom=pic.bottom;
			NotLoadBox.left=pic.left;
			NotLoadBox.right=pic.right+picWidth;
			break;
	    case 3:
			NotLoadBox.top=pic.top;
			NotLoadBox.bottom=pic.bottom-picHeight;
			NotLoadBox.left=pic.left;
			NotLoadBox.right=pic.right+picWidth;
			break;
		case 4:
			NotLoadBox.top=pic.top;
			NotLoadBox.bottom=pic.bottom-picHeight;
			NotLoadBox.left=pic.left-picWidth;
			NotLoadBox.right=pic.right;
			break;
	}
}

//---------fWhereIsCenterAtPic------------
int WhereIsCenterAtPic(POINT Center,RECT pic) //计算目标在目标图的位置 以及4幅图像交叉点的位置
{

  //
	int intXnumth = Center.x/picWidth;//取整
    int intYnumth = Center.y/picHeight;
	intXnumth++;intYnumth++;//左下角的文件名是01001

	int i;	 
   /*第一种情况   目标在目标图的左上部分*/
   if( Center.x>= pic.left  && Center.x <= pic.left+picWidth/2 && Center.y>=pic.bottom+picHeight/2 && Center.y<=pic.top)  
   { i=1; Cross.x=pic.left; Cross.y=pic.top; tag_intXnumth=intXnumth-1;tag_intYnumth=intYnumth;}
   
   /*第二种情况   目标在目标图的右上部分*/
   else if(Center.x > pic.left+picWidth/2   && Center.x<= pic.right && Center.y>=pic.bottom+picHeight/2 && Center.y<=pic.top)  
   { i=2; Cross.x=pic.right; Cross.y=pic.top; tag_intXnumth=intXnumth;tag_intYnumth=intYnumth;}
 
    /*第三种情况   目标在目标图的右下部*/
   else if(Center.x >= pic.left+picWidth/2   && Center.x<= pic.right && Center.y>=pic.bottom && Center.y<pic.bottom+picHeight/2)  
   { i=3; Cross.x=pic.right; Cross.y=pic.bottom;tag_intXnumth=intXnumth;tag_intYnumth=intYnumth-1;}

   /*第四种情况   目标在目标图的左下部*/
   else if(Center.x >= pic.left && Center.x<pic.left+picWidth/2 && Center.y>=pic.bottom && Center.y<pic.bottom+picHeight/2)  
   { i=4; Cross.x=pic.left; Cross.y=pic.bottom; tag_intXnumth=intXnumth-1;tag_intYnumth=intYnumth-1;}
	return i;
}


//----------------fRePosAndJudgeLoadPic----------------------------------------------------------------
void RePosAndJudgeLoadPic(POINT Center)//重新定位
{

	//if(Center.x>=)

	
/*	
	//now
    int i;

	//(1)目标图没改变
	if (new_intXnumth==intXnumth  && new_intYnumth==intYnumth)
	{
			  //1.目标图没变,所以目标图位置不要修改
			  //2.修改box的位置
			      box.top = Center.y + PicBoxHeight/2;
                  box.bottom = Center.y - PicBoxHeight/2;
                  box.left = Center.x - PicBoxWidth/2;
                  box.right = Center.x + PicBoxWidth/2;
	}
	//(2)上图变为目标图
	if (new_intXnumth==intXnumth  && new_intYnumth==intYnumth+1)
	{
			  //1.目标图变化,目标图移到上图。(即上图变为目标图)
		         intYnumth=new_intYnumth;
                 pic.left = intXnumth * picWidth;
                 pic.bottom = intYnumth * picHeight;
                 pic.right = pic.left + picWidth;
                 pic.top = pic.bottom + picHeight;
			  //2.修改box的位置
			      box.top = Center.y + PicBoxHeight/2;
                  box.bottom = Center.y - PicBoxHeight/2;
                  box.left = Center.x - PicBoxWidth/2;
                  box.right = Center.x + PicBoxWidth/2;
			  //3.重新分配设备环境
                  for(i=6;i<=8;i++)
				  {
					  SAFE_DeleteDC(g_hdc[i]);//释放设备环境 6 7 8  (!真正释放内存) 
					  g_hdc[i]=g_hdc[i-3];//3 4 5的设备环境给 6 7 8    (!只是指针修改)
					  g_hdc[i-3]=g_hdc[i-6];//0 1 2的设备环境给3 4 5
					  g_hdc[i-6]=NULL;//0 1 2的环境变量赋空

					  //load(  i-6  ) 多线程,在入0 1 2
				  }
	}

	//(3)下图变为目标图
	if (new_intXnumth==intXnumth  && new_intYnumth==intYnumth-1)
	{
			  //1.目标图变化,目标图移到下图。(即下图变为目标图)
		         intYnumth=new_intYnumth;
                 pic.left = intXnumth * picWidth;
                 pic.bottom = intYnumth * picHeight;
                 pic.right = pic.left + picWidth;
                 pic.top = pic.bottom + picHeight;
			  //2.修改box的位置
			      box.top = Center.y + PicBoxHeight/2;
                  box.bottom = Center.y - PicBoxHeight/2;
                  box.left = Center.x - PicBoxWidth/2;
                  box.right = Center.x + PicBoxWidth/2;
			  //3.重新分配其相应的设备环境
      			  for(i=0;i<=2;i++)
				  {
	  
					  SAFE_DeleteDC(g_hdc[i]);//释放设备环境 
					  g_hdc[i]=g_hdc[i+3];
					  g_hdc[i+3]=g_hdc[i+6];					  
					  g_hdc[i+6]=NULL;
					  //load(  i+6  ) 
				  }
	}
	//(4)左图变为目标图
	if (new_intXnumth==intXnumth-1  && new_intYnumth==intYnumth)
	{
			  //1.目标图变化
		         intXnumth=new_intXnumth;
                 pic.left = intXnumth * picWidth;
                 pic.bottom = intYnumth * picHeight;
                 pic.right = pic.left + picWidth;
                 pic.top = pic.bottom + picHeight;
			  //2.修改box的位置
			      box.top = Center.y + PicBoxHeight/2;
                  box.bottom = Center.y - PicBoxHeight/2;
                  box.left = Center.x - PicBoxWidth/2;
                  box.right = Center.x + PicBoxWidth/2;
			  //3.重新分配其相应的设备环境
			      for(i=2;i<=8;i=i+3)
				  {
					  SAFE_DeleteDC(g_hdc[i]);//释放设备环境 
					  g_hdc[i]=g_hdc[i-1];
					  g_hdc[i-1]=g_hdc[i-2]; 
					  g_hdc[i-2]=NULL;
					  //load(  i-2  ) 
				  }
	}
	//(5)右图变为目标图
	if (new_intXnumth==intXnumth+1  && new_intYnumth==intYnumth)
	{
			  //1.目标图变化,
		         intXnumth=new_intXnumth;
                 pic.left = intXnumth * picWidth;
                 pic.bottom = intYnumth * picHeight;
                 pic.right = pic.left + picWidth;
                 pic.top = pic.bottom + picHeight;
			  //2.修改box的位置
			      box.top = Center.y + PicBoxHeight/2;
                  box.bottom = Center.y - PicBoxHeight/2;
                  box.left = Center.x - PicBoxWidth/2;
                  box.right = Center.x + PicBoxWidth/2;
			  //3.重新分配其相应的设备环境
 				  for(i=0;i<=6;i=i+3)
				  {
					  SAFE_DeleteDC(g_hdc[i]);//释放设备环境 
					  g_hdc[i]=g_hdc[i+1];
					  g_hdc[i+1]=g_hdc[i+2]; 
					  g_hdc[i+2]=NULL;
					  //load(  i+2  ) 
				  }
	}
	
	//(6)左上图变为目标图
	if (new_intXnumth==intXnumth-1  && new_intYnumth==intYnumth+1)
	{
			  //1.目标图变化,
		         intXnumth=new_intXnumth;
				 intYnumth=new_intYnumth;
                 pic.left = intXnumth * picWidth;
                 pic.bottom = intYnumth * picHeight;
                 pic.right = pic.left + picWidth;
                 pic.top = pic.bottom + picHeight;
			  //2.修改box的位置
			      box.top = Center.y + PicBoxHeight/2;
                  box.bottom = Center.y - PicBoxHeight/2;
                  box.left = Center.x - PicBoxWidth/2;
                  box.right = Center.x + PicBoxWidth/2;
			  //3.重新分配其相应的设备环境
					  SAFE_DeleteDC(g_hdc[2]);//释放设备环境 
					  SAFE_DeleteDC(g_hdc[8]);//释放设备环境 
					  SAFE_DeleteDC(g_hdc[5]);//释放设备环境 
					  SAFE_DeleteDC(g_hdc[7]);//释放设备环境 
					  SAFE_DeleteDC(g_hdc[6]);//释放设备环境 
					  
					  g_hdc[8]=g_hdc[4];
					  g_hdc[4]=g_hdc[0];
					  g_hdc[5]=g_hdc[1];
					  g_hdc[7]=g_hdc[3];

					  g_hdc[0]=NULL;
					  g_hdc[1]=NULL;
					  g_hdc[2]=NULL;
					  g_hdc[3]=NULL;
					  g_hdc[6]=NULL;
	}
		//(7)右上图变为目标图
	if (new_intXnumth==intXnumth+1  && new_intYnumth==intYnumth+1)
	{
			  //1.目标图变化,
		         intXnumth=new_intXnumth;
				 intYnumth=new_intYnumth;
                 pic.left = intXnumth * picWidth;
                 pic.bottom = intYnumth * picHeight;
                 pic.right = pic.left + picWidth;
                 pic.top = pic.bottom + picHeight;
			  //2.修改box的位置
			      box.top = Center.y + PicBoxHeight/2;
                  box.bottom = Center.y - PicBoxHeight/2;
                  box.left = Center.x - PicBoxWidth/2;
                  box.right = Center.x + PicBoxWidth/2;
			  //3.重新分配其相应的设备环境
					  SAFE_DeleteDC(g_hdc[0]);//释放设备环境 
					  SAFE_DeleteDC(g_hdc[3]);//释放设备环境 
					  SAFE_DeleteDC(g_hdc[8]);//释放设备环境 
					  SAFE_DeleteDC(g_hdc[7]);//释放设备环境 
					  SAFE_DeleteDC(g_hdc[6]);//释放设备环境 
					  
					  g_hdc[6]=g_hdc[4];
					  g_hdc[4]=g_hdc[2];
					  g_hdc[3]=g_hdc[1];
					  g_hdc[7]=g_hdc[5];

					  g_hdc[0]=NULL;
					  g_hdc[1]=NULL;
					  g_hdc[2]=NULL;
					  g_hdc[5]=NULL;
					  g_hdc[8]=NULL;
	}
	//(8)右下图变为目标图
	if (new_intXnumth==intXnumth+1  && new_intYnumth==intYnumth-1)
	{
			  //1.目标图变化,
		         intXnumth=new_intXnumth;
				 intYnumth=new_intYnumth;
                 pic.left = intXnumth * picWidth;
                 pic.bottom = intYnumth * picHeight;
                 pic.right = pic.left + picWidth;
                 pic.top = pic.bottom + picHeight;
			  //2.修改box的位置
			      box.top = Center.y + PicBoxHeight/2;
                  box.bottom = Center.y - PicBoxHeight/2;
                  box.left = Center.x - PicBoxWidth/2;
                  box.right = Center.x + PicBoxWidth/2;
			  //3.重新分配其相应的设备环境
					  SAFE_DeleteDC(g_hdc[0]);//释放设备环境 
					  SAFE_DeleteDC(g_hdc[3]);//释放设备环境 
					  SAFE_DeleteDC(g_hdc[1]);//释放设备环境 
					  SAFE_DeleteDC(g_hdc[2]);//释放设备环境 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -