All pastes #100498 Raw Edit

Mine

public cpp v1 · immutable
#100498 ·published 2006-07-26 05:24 UTC
rendered paste body
void CTopCachedWnd::AnimateZoomRotate(BOOL hide, int time, float sp){	FirstInit();	int ssize=(int)sqrt((float)(size.cx*size.cx+size.cy*size.cy));	CBitmap bmp;	bmp.CreateBitmap(ssize,ssize,1,32,NULL);	CDC bdc;	bdc.CreateCompatibleDC(&dc);	bdc.SelectObject(&bmp);	CRect cr;	GetWindow()->GetWindowRect(&cr);	DWORD start=GetTickCount();	DWORD cur;	CPoint p;	CPoint pp(0,0);//	bdc.SetStretchBltMode(HALFTONE);	bdc.SetGraphicsMode(GM_ADVANCED);	XFORM xf;	BITMAP bmpinfo;	bmp.GetObject(sizeof(BITMAP),&bmpinfo);		char* bmpbuf=new char[bmpinfo.bmWidthBytes*bmpinfo.bmHeight];	Animating=TRUE;	bdc.SetViewportOrg(ssize/2,ssize/2);	if (!hide) GetWindow()->ShowWindow(SW_SHOW);	DrawOnly();	p.x=(cr.left+cr.right)/2-ssize/2;	p.y=(cr.top+cr.bottom)/2-ssize/2;	CSize sz(ssize,ssize);	GetWindow()->SetWindowPos(NULL,p.x,p.y,ssize,ssize,SWP_NOZORDER|SWP_NOCOPYBITS|SWP_NOREDRAW|SWP_HIDEWINDOW);	BLENDFUNCTION bf;	bf.SourceConstantAlpha=255;	bf.AlphaFormat=AC_SRC_ALPHA;	bf.BlendFlags=0;	bf.BlendOp=AC_SRC_OVER;	while(GetTickCount()<start+time)	{		cur=GetTickCount()-start;		int nx,ny;		float koof;		if (hide)			koof=1-cur/(float)time;		else			koof=cur/(float)time;		nx=size.cx*koof;		ny=size.cy*koof;		float ssp=sp*cur/time;		xf.eM11=cos(ssp)*koof; xf.eM12=-sin(ssp)*koof;		xf.eM21=sin(ssp)*koof; xf.eM22=cos(ssp)*koof;		xf.eDx=0;xf.eDy=0;		bmp.GetBitmapBits(bmpinfo.bmWidthBytes*bmpinfo.bmHeight,bmpbuf);		for(int y=0;y<bmpinfo.bmHeight;y++)			memset(bmpbuf+y*bmpinfo.bmWidthBytes,0,bmpinfo.bmWidth*4);		bmp.SetBitmapBits(bmpinfo.bmWidthBytes*bmpinfo.bmHeight,bmpbuf);		bdc.SetWorldTransform(&xf);//		bdc.StretchBlt(-nx/2,-ny/2,nx,ny,&dc,0,0,cr.Width(),cr.Height(),SRCCOPY);		bdc.BitBlt(-size.cx/2,-size.cy/2,size.cx,size.cy,&dc,0,0,SRCCOPY);//		bdc.ModifyWorldTransform(0,MWT_IDENTITY);////		bdc.FillSolidRect(-ssize/2,-ssize/2,100,100,0xFFFF);		bmp.GetBitmapBits(bmpinfo.bmWidthBytes*bmpinfo.bmHeight,bmpbuf);		DWORD* val;		for(int y=0;y<bmpinfo.bmHeight;y++)			for(int x=0;x<bmpinfo.bmWidth;x++)			{				val=(DWORD*)(bmpbuf+y*bmpinfo.bmWidthBytes+x*4);				*val|=(0xff<<24)*(*val!=0);			}		bmp.SetBitmapBits(bmpinfo.bmWidthBytes*bmpinfo.bmHeight,bmpbuf);		GetWindow()->UpdateLayeredWindow(NULL,&p,&sz,&bdc,&pp,0,&bf,ULW_ALPHA);		GetWindow()->ShowWindow(SW_SHOW);	}	delete[] bmpbuf;	p.x=cr.left;	p.y=cr.top;			Animating=FALSE;	if (hide)		GetWindow()->ShowWindow(SW_HIDE);	GetWindow()->SetWindowPos(NULL,p.x,p.y,size.cx,size.cy,SWP_NOZORDER|SWP_NOCOPYBITS|SWP_NOSENDCHANGING );	GetWindow()->UpdateLayeredWindow(NULL,&p,&size,&dc,&pp,0,0,ULW_OPAQUE);}