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

📄 demodlg.cpp

📁 服务端: 这是一个完整的基于Wince 4.1图形图象,网络通讯(C/S)模式下的商用程序源代码包.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			//有透明色//图象扩展参数(与透明背景和动画有关)
               if(fm->ctrlExt.active&&fm->ctrlExt.trsFlag&&           
                  (UINT)(fm->dataBuf[H*fm->imageWidth+w])==(UINT)(fm->ctrlExt.trsColorIndex) 
				 )
               {
					   continue; 
			   }
			   else
               {   
				   pos1=((h+y)*gi->scrWidth+w+x) *3 +0;
				   //pos1=(h*fm->imageWidth+w) *3 +0;
				   pos2=fm->dataBuf[H*fm->imageWidth+w]*3+0;
				   //R 				   
				   imageData[pos1++]=pColorTable[pos2++];
				   //G
				   imageData[pos1++]=pColorTable[pos2++];				   
				   //B
				   imageData[pos1++]=pColorTable[pos2++];
			   }
				
              }
             //T3[2,6,10,2+4*K]
             for( h=2;h<fm->imageHeight;h+=4,H++)
              for( w=0;w<fm->imageWidth;w++)
              {
                //fm->dataBuf[h*fm->imageWidth+w]
                //有透明色//图象扩展参数(与透明背景和动画有关)
               if(fm->ctrlExt.active&&fm->ctrlExt.trsFlag&&           
                  (UINT)(fm->dataBuf[H*fm->imageWidth+w])==(UINT)(fm->ctrlExt.trsColorIndex) 
				 )
               {
				   continue; 
			   }
			   else
               {   pos1=((h+y)*gi->scrWidth+w+x) *3 +0;
				   // pos1=(h*fm->imageWidth+w) *3 +0;
				   pos2=fm->dataBuf[H*fm->imageWidth+w]*3+0;
				   //R 				   
				   imageData[pos1++]=pColorTable[pos2++];
				   //G
				   imageData[pos1++]=pColorTable[pos2++];				   
				   //B
				   imageData[pos1]=pColorTable[pos2];	
			   }
              }
             //T4[1,3,5,1+2*K]
             for( h=1;h<fm->imageHeight;h+=2,H++)
              for( w=0;w<fm->imageWidth;w++)
              {
                //fm->dataBuf[h*fm->imageWidth+w]               
				  //有透明色//图象扩展参数(与透明背景和动画有关)
               if(fm->ctrlExt.active&&fm->ctrlExt.trsFlag&&           
                  (UINT)(fm->dataBuf[H*fm->imageWidth+w])==(UINT)(fm->ctrlExt.trsColorIndex) 
				 )
               {
					   continue; 
			   }
			   else
               {
                   pos1=((h+y)*gi->scrWidth+w+x) *3 +0;
				   //pos1=(h*fm->imageWidth+w) *3 +0;
				   pos2=fm->dataBuf[H*fm->imageWidth+w]*3+0;
				   //R 				   
				   imageData[pos1++]=pColorTable[pos2++];
				   //G
				   imageData[pos1++]=pColorTable[pos2++];				   
				   //B
				   imageData[pos1++]=pColorTable[pos2++];
			   }
				
              }
            }
            else//数据是连续的
            {
             //////////////////////////////////////
             //long w,h;
			 //fm->imageLPos// 
			 //fm->imageTPos// 
			  
             for( h=0;h<fm->imageHeight;h++)
              for( w=0;w<fm->imageWidth;w++)
			  {               
                //fm->dataBuf[h*fm->imageWidth+w]
				 
			   //有透明色//图象扩展参数(与透明背景和动画有关)
               if(fm->ctrlExt.active&&fm->ctrlExt.trsFlag&&                             
                   (UINT)(fm->dataBuf[h*fm->imageWidth+w])==(UINT)(fm->ctrlExt.trsColorIndex) 
				  )
			   {
				   continue; 			 

			   }
			   //else                   
			   {   
				   pos1=((h+y)*gi->scrWidth+w+x) *3 +0;
				  //pos1=(h*fm->imageWidth+w) *3 +0;
				   pos2=fm->dataBuf[h*fm->imageWidth+w]*3+0;
				   //R 				   
				   imageData[pos1++]=pColorTable[pos2++];
				   //G
				   imageData[pos1++]=pColorTable[pos2++];				   
				   //B
				   imageData[pos1++]=pColorTable[pos2++];
			   }			  
			   //
              }
         }
    }        
     //create 缓冲位图
    

	HBITMAP hBitmap =CSTScreenBuffer::CreateBitmapByRGBArray(imageData, 
		                                                     gi->scrWidth,
		                                                     gi->scrHeight  
															);
	if(!hBitmap) return NULL;

	//free imageData !!!!!
//	ASSERT(hBitmap);//???
	//。。。。
   
	return hBitmap;
  
}
//图片显示方式功能函数
void CDemoDlg::DemoPic(CDC &dc,CDC &MemDC,int w,int h,int fun_in,int fun_out,long speed,long delaytime)
{
	
	int in,out;
	 in=fun_in;
	 out=fun_out;
	 if(fun_in==0)//MAX_ADD_SHOWWAY-2)
	 {
       //get rand seed,
	   //使每次产生的随机数不一样                           
		 SYSTEMTIME st;
         GetSystemTime(&st);
		 unsigned int seed;
		 seed=st.wHour*3600+st.wMinute*60+st.wSecond;   
         srand(seed);
		 int n;
		 n=rand();
         n=n%(MAX_ADD_SHOWWAY-4); // 得到一个0-(MAX_ADD_SHOWWAY-4)的数
		 //
		 in=n+1;
	 }
     if(fun_out==0)//MAX_ADD_SHOWWAY-3)//-2
	 {
       //get rand seed,
	   //使每次产生的随机数不一样                           
		 SYSTEMTIME st;
         GetSystemTime(&st);
		 unsigned int seed;
		 seed=st.wHour*3600+st.wMinute*60+st.wSecond+st.wMilliseconds;   
         srand(seed);
		 int n;
		 n=rand();
         n=n%(MAX_ADD_SHOWWAY-5); // 得到一个0-(MAX_ADD_SHOWWAY-5)的数
		 n=(MAX_ADD_SHOWWAY-5)-n;
		 //
		 out=n+1;
	 }
   //进入方式
		 switch(in)
		 {
			case 1://立即进入
					{
					 dc.BitBlt(0,0, w,h,&MemDC,0,0,SRCCOPY);
					}
					break;
			case 2://闪烁进入
					{
						CBrush brush;
						brush.CreateSolidBrush(RGB(0,0,0)); 
                       //第一次
                       //show dc
						dc.BitBlt(0,0, w,h,&MemDC,0,0,SRCCOPY);
					   //delay time
						Sleep(200);//200ms
                       //cls->black
                        dc.FillRect(CRect(0,0,w,h),&brush); 
					   //delay time
                        Sleep(200);//200ms 
						if(m_all_run_flag==false) goto exit_l1;
					   //第二次
                       //show dc
						dc.BitBlt(0,0, w,h,&MemDC,0,0,SRCCOPY);
					   //delay time
						Sleep(200);//200ms
                       //cls->black
                        dc.FillRect(CRect(0,0,w,h),&brush); 
					   //delay time
                        Sleep(200);//200ms 
                        if(m_all_run_flag==false) goto exit_l1;
                       //第三次
					   //show dc
						dc.BitBlt(0,0, w,h,&MemDC,0,0,SRCCOPY);
					   //delay time
						Sleep(200);//200ms
                       //cls->black
                        dc.FillRect(CRect(0,0,w,h),&brush); 
					   //delay time
                        Sleep(200);//200ms 
                        if(m_all_run_flag==false) goto exit_l1;
					   //最后 
					   //show dc
                        dc.BitBlt(0,0, w,h,&MemDC,0,0,SRCCOPY);
						//
					exit_l1:
						brush.DeleteObject();
						
					}
					 break;
			case 3://由上至下移动出现					
				{   //save dc
					CDC tmpdc;
					tmpdc.CreateCompatibleDC(&dc);
					CBitmap b;
					b.CreateCompatibleBitmap(&dc,w,h);
                    CBitmap *ob=tmpdc.SelectObject(&b); 
					tmpdc.BitBlt(0,0,w,h,&dc,0,0,SRCCOPY); 
                    //show dc
					for(int i=0;i<h;i++)
					 {
						 //
						 if(m_all_run_flag==false) break;
						 
						 dc.BitBlt(0,i+1,w,h-i-1,&tmpdc,0,0,SRCCOPY); 
						 //
						 dc.BitBlt(0,0,w,i+1,&MemDC,0,h-i-1,SRCCOPY); 
						 //delay time
						 Sleep(speed);
					 }	
						//RELEASE 
					 tmpdc.SelectObject(ob); 
                     b.DeleteObject(); 
                     tmpdc.DeleteDC(); 
				}
					 break;
			case 4://由下至上移动出现
				{
					//save dc  bitmap==>tmpdc
					CDC tmpdc;
					tmpdc.CreateCompatibleDC(&dc);
					CBitmap b;
					b.CreateCompatibleBitmap(&dc,w,h);
                    CBitmap *ob=tmpdc.SelectObject(&b); 
					tmpdc.BitBlt(0,0,w,h,&dc,0,0,SRCCOPY); 

					//show
					for(int i=0;i<h;i++)
					 {
						 //
						 if(m_all_run_flag==false) break;
						 dc.BitBlt(0,0,w,h-i-1,&tmpdc,0,i,SRCCOPY); 
						 //
						 dc.BitBlt(0,h-i-1,w,i+1,&MemDC,0,0,SRCCOPY); 
						 //delay time
						 Sleep(speed);
					 }
					//RELEASE 
					 tmpdc.SelectObject(ob); 
                     b.DeleteObject(); 
                     tmpdc.DeleteDC(); 
				}
					break;
			case 5://由上至下展开出现
				{
                   for(int i=0;i<h;i++)
				   {
					if(m_all_run_flag==false) break;
					//show
                     dc.BitBlt(0,i,w,1,&MemDC,0,i,SRCCOPY); 
					//delay time
					 Sleep(speed);
				   }
				}
					break;
			case 6://由下至上展开出现
				{
                  for(int i=0;i<h;i++)
				   {
					if(m_all_run_flag==false) break;
					//show
                     dc.BitBlt(0,h-i-1,w,1,&MemDC,0,h-i-1,SRCCOPY); 
					//delay time
					 Sleep(speed);
				   }
				}
					break;
			case 7://由中间至上下展开出现
				{
					int k=h/2;
					 
					//show k
					   // if(h%2!=0)
						dc.BitBlt(0,k,w,1,&MemDC,0,k,SRCCOPY); 
						//show [0]-[k-1] and [k+1],[2k]
						for(int i=0;i<k;i++)
						{
						  if(m_all_run_flag==false) break;
						  //up
                          dc.BitBlt(0,k-1-i,w,1,&MemDC,0,k-1-i,SRCCOPY); 
						  //down
						  dc.BitBlt(0,k+1+i,w,1,&MemDC,0,k+1+i,SRCCOPY);  
						  //delay time
					       Sleep(speed);
						}			

				}
					break;
			case 8://由上下至中间展开出现
				{
                    int k=h/2;
										
					//show [0]-[k-1] and [k+1],[2k]
						for(int i=0;i<k;i++)
						{
						  if(m_all_run_flag==false) break;
						  //up
                          dc.BitBlt(0,i,w,1,&MemDC,0,i,SRCCOPY); 
						  //down
						  dc.BitBlt(0,h-1-i,w,1,&MemDC,0,h-1-i,SRCCOPY);  
						  //delay time
					       Sleep(speed);
						}
                         //show k
						//if(h%2!=0)
						dc.BitBlt(0,k,w,1,&MemDC,0,k,SRCCOPY); 
				
				}
					break;
			case 9://由左至右展开出现
				{
                   for(int i=0;i<w;i++)
				   {
					if(m_all_run_flag==false) break;
					//show
                     dc.BitBlt(i,0,1,h,&MemDC,i,0,SRCCOPY); 
					//delay time
					 Sleep(speed);
				   }
				}
					break;
			case 10://由右至左展开出现
				{
                   for(int i=0;i<w;i++)
				   {
					if(m_all_run_flag==false) break;
					//show
                     dc.BitBlt(w-i-1,0,1,h,&MemDC,w-i-1,0,SRCCOPY); 
					//delay time
					 Sleep(speed);
				   }
				}
					break;
			case 11://由中间至左右展开出现
				{
                  int k=w/2;
				  //show k
				   dc.BitBlt(k,0,1,h,&MemDC,k,0,SRCCOPY); 
				  for(int i=0;i<k;i++)
				  {
                     if(m_all_run_flag==false) break;
					 //mid->left
					  dc.BitBlt(k-1-i,0,1,h,&MemDC,k-1-i,0,SRCCOPY); 
					 //mid->right
					  dc.BitBlt(k+i,0,1,h,&MemDC,k+i,0,SRCCOPY); 
					//delay time
					 Sleep(speed);
				  }			  
                  
				}
					break;
			case 12://由左右至中间展开出现
				{
                  int k=w/2;
				  
				  for(int i=0;i<k;i++)
				  {
                     if(m_all_run_flag==false) break;
					 //left->mid
					  dc.BitBlt(i,0,1,h,&MemDC,i,0,SRCCOPY); 
					 //right->mid
					  dc.BitBlt(w-1-i,0,1,h,&MemDC,w-1-i,0,SRCCOPY); 
					//delay time
					 Sleep(speed);
				  }
				  //show k
				   dc.BitBlt(k,0,1,h,&MemDC,k,0,SRCCOPY); 
				}
					break;
			case 13://百页窗竖式向右展开出现 //向右
				{
                  //8
					int k=w/8;
					if(w/8!=0) k++;
                   
					for(int i=0;i<8;i++)
					{
						if(m_all_run_flag==false) break;
						for(int j=0;j<k;j++)
						{
						if(m_all_run_flag==false) break;
                          dc.BitBlt(j*8+i,0,1,h,&MemDC, j*8+i,0,SRCCOPY);
						  Sleep(speed);
						}
						Sleep(speed);
					}
                  
				}
					break;
			case 14://百页窗竖式向左展开出现 //向左
				{
                  //8
				   int k=w/8;
					if(w/8!=0) k++;
                   
					for(int i=0;i<8;i++)
					{
						if(m_all_run_flag==false) break;
						for(int j=0;j<k;j++)
						{
						if(m_all_run_flag==false) break;
                          dc.BitBlt(w-1-j*8+i,0,1,h,&MemDC, w-1-j*8+i,0,SRCCOPY);
						  Sleep(speed);
						}
						Sleep(speed);
					}	
				}
					break;
			case 15://百页窗横式向下展开出现//向下
				{
                   //8
					int k=h/8;
					if(h/8!=0) k++;
                   
					for(int i=0;i<8;i++)
					{
						if(m_all_run_flag==false) break;
						for(int j=0;j<k;j++)
						{
						if(m_all_run_flag==false) break;
                          dc.BitBlt(0,j*8+i,w,1,&MemDC, 0,j*8+i,SRCCOPY);
						  Sleep(speed);
						}
						Sleep(speed);
					}
				}
					break;
			case 16://百页窗横式向上展开出现//向上
				{
                   //8 
					int k=h/8;
					if(h/8!=0) k++;
                   
					for(int i=0;i<8;i++)
					{
						if(m_all_run_flag==false) break;
						for(int j=0;j<k;j++)
						{
						if(m_all_run_flag==false) break;
                          dc.BitBlt(0,h-1-j*8+i,w,1,&MemDC, 0,h-1-j*8+i,SRCCOPY);
						  Sleep(speed);
						}
						Sleep(speed);
					}
				}

⌨️ 快捷键说明

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