void CEffect::SmallToBig(HDC dc, HDC memdc, CRect rtReDraw )
{
int ScreenW = GetSystemMetrics(SM_CXSCREEN);
int ScreenH = GetSystemMetrics(SM_CYSCREEN);
int HStep = 35;
int WStep = ScreenW*HStep/ScreenH;
HDC Memdc2 = CreateCompatibleDC(dc);
HBITMAP Membmp = CreateCompatibleBitmap(dc, rtReDraw.Width(), rtReDraw.Height() );
::SelectObject(Memdc2, Membmp);
::BitBlt(Memdc2, 0, 0, rtReDraw.Width(), rtReDraw.Height(),
dc, rtReDraw.left, rtReDraw.top, SRCCOPY);
for (int i=HStep; i<=ScreenH; i+=HStep) //方块从小到大
{
WStep = ScreenW*i/ScreenH;
::BitBlt(Memdc2 ,(ScreenW-WStep)/2 , (ScreenH-i)/2,WStep ,i, memdc,(ScreenW-WStep)/2 ,(ScreenH-i)/2, SRCCOPY);
::BitBlt(dc, rtReDraw.left, rtReDraw.top, rtReDraw.Width(), rtReDraw.Height(), Memdc2, 0, 0, SRCCOPY);
}
::BitBlt(dc, rtReDraw.left, rtReDraw.top, rtReDraw.Width(), rtReDraw.Height(), memdc, 0, 0, SRCCOPY);
::DeleteDC(Memdc2);
::DeleteObject(Membmp);
}
void CEffect::BigToSmall(HDC dc, HDC memdc, CRect rtReDraw )
{
int ScreenW = GetSystemMetrics(SM_CXSCREEN);
int ScreenH = GetSystemMetrics(SM_CYSCREEN);
int HStep = 35;
int WStep = ScreenW*HStep/ScreenH;
HDC Memdc2 = CreateCompatibleDC(dc);
HBITMAP Membmp = CreateCompatibleBitmap(dc, rtReDraw.Width(), rtReDraw.Height() );
::SelectObject(Memdc2, Membmp);
::BitBlt(Memdc2, 0, 0, rtReDraw.Width(), rtReDraw.Height(),
dc, rtReDraw.left, rtReDraw.top, SRCCOPY);
for (int i=HStep; i<=ScreenH; i+=HStep)
{
WStep = ScreenW*i/ScreenH;
::BitBlt(Memdc2 ,0, 0 ,ScreenW,i , memdc,0 ,0, SRCCOPY); //横条顶端往下
::BitBlt(Memdc2 ,0, ScreenH-i ,ScreenW,i , memdc,0 ,ScreenH-i, SRCCOPY); //横条底端往下
::BitBlt(Memdc2 ,0, 0,WStep,ScreenH , memdc,0 ,0, SRCCOPY); //竖条左边往右
::BitBlt(Memdc2 ,ScreenW-WStep, 0 ,WStep,ScreenH , memdc,ScreenW-WStep,0, SRCCOPY); //竖条右边往左
::BitBlt(dc, rtReDraw.left, rtReDraw.top, rtReDraw.Width(), rtReDraw.Height(), Memdc2, 0, 0, SRCCOPY);
}
::BitBlt(dc, rtReDraw.left, rtReDraw.top, rtReDraw.Width(), rtReDraw.Height(), memdc, 0, 0, SRCCOPY);
::DeleteDC(Memdc2);
::DeleteObject(Membmp);
}
void CEffect::DownToUp(HDC dc, HDC memdc, CRect rtReDraw)
{
int ScreenW = GetSystemMetrics(SM_CXSCREEN);
int ScreenH = GetSystemMetrics(SM_CYSCREEN);
int Step = 8;
HDC Memdc2 = CreateCompatibleDC(dc);
HDC Memdc3 = CreateCompatibleDC(dc);
HBITMAP Membmp = CreateCompatibleBitmap(dc, rtReDraw.Width(), rtReDraw.Height() );
HBITMAP Membmp3 = CreateCompatibleBitmap(dc, rtReDraw.Width(), rtReDraw.Height() );
::SelectObject(Memdc2, Membmp);
::SelectObject(Memdc3, Membmp3);
::BitBlt(Memdc2, 0, 0, rtReDraw.Width(), rtReDraw.Height(),
dc, rtReDraw.left, rtReDraw.top, SRCCOPY);
::BitBlt(Memdc3, 0, 0, rtReDraw.Width(), rtReDraw.Height(),
dc, rtReDraw.left, rtReDraw.top, SRCCOPY);
if (rtReDraw.Width() > 720)
Step = 20;
for( int i = Step ; i <= ScreenH; i+= Step )
{
::BitBlt(Memdc2, rtReDraw.left, 0, rtReDraw.Width(), ScreenH - i, Memdc3, 0, i, SRCCOPY);
::BitBlt(Memdc2 , rtReDraw.left, ScreenH - i , rtReDraw.Width(), i, memdc, 0, 0, SRCCOPY);
::BitBlt(dc, rtReDraw.left, rtReDraw.top, rtReDraw.Width(), rtReDraw.Height(),
Memdc2, 0, 0, SRCCOPY);
}
if( i != ScreenH + Step )
{
::BitBlt(Memdc2 , 0, rtReDraw.top, ScreenW, rtReDraw.Height(), memdc, 0, 0, SRCCOPY);
::BitBlt(dc, rtReDraw.left, rtReDraw.top, rtReDraw.Width(), rtReDraw.Height(), Memdc2, 0, 0, SRCCOPY);
}
::DeleteDC(Memdc2);
::DeleteDC(Memdc3);
::DeleteObject(Membmp);
::DeleteObject(Membmp3);
}
void CEffect::UpToDown(HDC dc, HDC memdc, CRect rtReDraw) //由上到下
{
int ScreenW = GetSystemMetrics(SM_CXSCREEN);
int ScreenH = GetSystemMetrics(SM_CYSCREEN);
int Step = 8;
HDC Memdc2 = CreateCompatibleDC(dc);
HDC Memdc3 = CreateCompatibleDC(dc);
HBITMAP Membmp = CreateCompatibleBitmap(dc, rtReDraw.Width(), rtReDraw.Height() );
HBITMAP Membmp3 = CreateCompatibleBitmap(dc, rtReDraw.Width(), rtReDraw.Height() );
::SelectObject(Memdc2, Membmp);
::SelectObject(Memdc3, Membmp3);
::BitBlt(Memdc2, 0, 0, rtReDraw.Width(), rtReDraw.Height(),
dc, rtReDraw.left, rtReDraw.top, SRCCOPY);
::BitBlt(Memdc3, 0, 0, rtReDraw.Width(), rtReDraw.Height(),
dc, rtReDraw.left, rtReDraw.top, SRCCOPY);
if (rtReDraw.Width() > 720)
{
Step = 20;
}
for( int i = Step ; i <= ScreenH; i+= Step )
{
::BitBlt(Memdc2, rtReDraw.left, i, rtReDraw.Width() , ScreenH - i, Memdc3, 0, 0, SRCCOPY);
::BitBlt(Memdc2 , 0, rtReDraw.top, rtReDraw.Width(), i, memdc, 0, ScreenH - i, SRCCOPY);
::BitBlt(dc, rtReDraw.left, rtReDraw.top, rtReDraw.Width(), rtReDraw.Height(), Memdc2, 0, 0, SRCCOPY);
}
if( i != ScreenH + Step )
{
::BitBlt(Memdc2 , 0, rtReDraw.top, ScreenW, rtReDraw.Height(), memdc, 0, 0, SRCCOPY);
::BitBlt(dc, rtReDraw.left, rtReDraw.top, rtReDraw.Width(), rtReDraw.Height(), Memdc2, 0, 0, SRCCOPY);
}
::DeleteDC(Memdc2);
::DeleteDC(Memdc3);
::DeleteObject(Membmp);
::DeleteObject(Membmp3);
}
GDI特效2
最新推荐文章于 2017-03-20 10:12:56 发布