//劈成两半打开特效
class CCut2Open
{
public:
CCut2Open();
virtual ~CCut2Open();
public:
void SetWindowBmp(int nBmpID,HMODULE hRes);
void Open();
void Close();
private:
HDC m_hThisMemDC;
HBITMAP m_hThisbitmap;
HBITMAP m_hOldThisbitmap;
HDC m_hPrevMemDC;
HBITMAP m_hPrevbitmap;
HBITMAP m_hOldPrevbitmap;
BOOL m_Init;
BOOL m_Opened;
BITMAP m_size;
int m_dist;
};
CCut2Open::CCut2Open()
{
m_hThisMemDC = NULL;
m_hThisbitmap = NULL;
m_hOldThisbitmap = NULL;
m_hPrevMemDC = NULL;
m_hPrevbitmap = NULL;
m_hOldPrevbitmap = NULL;
m_Init = m_Opened =TRUE;
m_dist = 4;
}
CCut2Open::~CCut2Open()
{
if (NULL != m_hThisMemDC )
{
::SelectObject(m_hThisMemDC,m_hOldThisbitmap);
::DeleteDC(m_hThisMemDC);
}
if (NULL != m_hThisbitmap )
{
::DeleteObject(m_hThisbitmap);
}
if (NULL != m_hOldThisbitmap)
{
m_hOldThisbitmap=NULL;
}
if (NULL != m_hPrevMemDC )
{
::SelectObject(m_hPrevMemDC,m_hPrevbitmap);
::DeleteDC(m_hPrevMemDC);
}
if (NULL != m_hPrevbitmap )
{
::DeleteObject(m_hPrevbitmap);
}
if (NULL != m_hOldPrevbitmap)
{
m_hOldPrevbitmap= NULL;
}
m_Init = m_Opened =TRUE;
}
void CCut2Open::Open()
{
if (m_Init)
{
HDC hdc=::GetDC(NULL);
int i = 0,w=0;
int nWidth = (m_size.bmWidth>>1);
int nHeight = m_size.bmHeight;
for ( i = nWidth-m_dist; i>=0; i-=m_dist)
{
w = nWidth - i;
BitBlt(hdc,0,0,i,nHeight,m_hPrevMemDC,w,0,SRCCOPY);
BitBlt(hdc,i,0,w,nHeight,m_hThisMemDC,nWidth - w,0,SRCCOPY);
BitBlt(hdc,nWidth,0,w,nHeight,m_hThisMemDC,nWidth,0,SRCCOPY);
BitBlt(hdc,nWidth + w,0,nWidth-w,nHeight,m_hPrevMemDC,nWidth,0,SRCCOPY);
}
::ReleaseDC(NULL,hdc);
m_Opened = TRUE;
}
}
void CCut2Open::Close()
{
if (m_Init)
{
HDC hdc=::GetDC(NULL);
int i = 0;
int nWidth = (m_size.bmWidth>>1);
int nHeight = m_size.bmHeight;
for ( i = 0;i<=nWidth;i+=m_dist)
{
BitBlt(hdc,0,0,i,nHeight,m_hPrevMemDC,nWidth-i,0,SRCCOPY);
BitBlt(hdc,m_size.bmWidth-i,0,i,nHeight,m_hPrevMemDC,nWidth,0,SRCCOPY);
}
::ReleaseDC(NULL,hdc);
}
}
void CCut2Open::SetWindowBmp(int nBmpID,HMODULE hRes)
{
HDC hdc=::GetDC(NULL);
HMODULE hHandle = AfxGetResourceHandle();
if ( NULL!=hRes)
{
hHandle = hRes;
}
m_hThisbitmap = ::LoadBitmap(hHandle,MAKEINTRESOURCE(nBmpID));
m_hThisMemDC= ::CreateCompatibleDC(NULL);
m_hPrevMemDC= ::CreateCompatibleDC(NULL);
if (NULL != m_hThisbitmap && NULL != m_hPrevMemDC && NULL != m_hThisMemDC)
{
m_hOldThisbitmap = (HBITMAP)::SelectObject(m_hThisMemDC,m_hThisbitmap);
::GetObject(m_hThisbitmap,sizeof(BITMAP),&m_size);
m_hPrevbitmap = ::CreateCompatibleBitmap(hdc,m_size.bmWidth,m_size.bmHeight);
m_hOldPrevbitmap = (HBITMAP)::SelectObject(m_hPrevMemDC,m_hPrevbitmap);
::BitBlt(m_hPrevMemDC,0,0,m_size.bmWidth,m_size.bmHeight,hdc,0,0,SRCCOPY);
m_Init = TRUE;
}
::ReleaseDC(NULL,hdc);
}
CCut2Open open;
open.SetWindowBmp(IDB_BITMAP1,AfxGetResourceHandle());
open.Open();
open.Close();