📄 demodlg.cpp
字号:
//有透明色//图象扩展参数(与透明背景和动画有关)
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 + -