以下代碼是關於用類CmdiMainClient來顯示動畫背景旗幟的一個例子。原理是很簡單的,我們只需要一系列連續的位圖,並且讓它連續顯示。在這個例子中你可以用鼠標的右鍵來開始/停止這個動畫,如果點左鍵的話,就可以顯示一個子窗口,來保持動畫是繼續。為了你的方便,你可以把代碼直接從浏覽器中拷貝下去,並且插到你的代碼中就行了。以下是代碼:
#include "stdafx.h"
#include "banner.h"
#include "mainfrm.h"
#include "resource.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMdiMainClient
CMdiMainClient::CMdiMainClient()
: m_sizeClient(0, 0)
{
VERIFY (m_bmpBackGround.LoadBitmap(IDB_BCKGRD));
ASSERT (m_bmpBackGround.GetSafeHandle());
VERIFY (m_bmpBackGround2.LoadBitmap(IDB_BITMAP0));
ASSERT (m_bmpBackGround2.GetSafeHandle());
BmpLoaded = 1;
StopRotation = FALSE;
}
CMdiMainClient::~CMdiMainClient()
{
if(m_bmpBackGround.GetSafeHandle())
m_bmpBackGround.DeleteObject();
if(m_bmpBackGround2.GetSafeHandle())
m_bmpBackGround2.DeleteObject();
}
BEGIN_MESSAGE_MAP(CMdiMainClient, CWnd)
//{{AFX_MSG_MAP(CMdiMainClient)
// NOTE - the ClassWizard will add and remove mapping macros here.
ON_WM_TIMER()
ON_WM_ERASEBKGND()
ON_WM_RBUTTONDOWN()
ON_WM_LBUTTONDOWN()
ON_WM_SIZE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMdiMainClient message handlers
BOOL CMdiMainClient::OnEraseBkgnd(CDC* pDC)
{
// Erase only the area needed
CRect rect;
GetClientRect(&rect) ;
SetTimer(0,300,NULL);
// Place the bitmap
BITMAP bm ;
CDC dcMem ;
&nb