以下代码是关于用类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 ;
BITMAP bm2 ; CDC dcMem2;
VERIFY(m_bmpBackGround.GetObject(sizeof(bm), (LPVOID)&bm)); dcMem.CreateCompatibleDC(NULL); CBitmap* pbmpOld = (CBitmap*)dcMem.SelectObject(&m_bmpBackGround); ASSERT(pbmpOld) ; // Display red background pDC->StretchBlt(0, 0, rect.right, rect.bottom, &dcMem, 0, 0, bm.bmWidth, bm.bmHeight,SRCCOPY);
VERIFY(m_bmpBackGround2.GetObject(sizeof(bm2), (LPVOID)&bm2)); dcMem2.CreateCompatibleDC(NULL); dcMem2.SelectObject(&m_bmpBackGround2); // Display picture background pDC->StretchBlt(200,100,400, 200, &dcMem2, 0,0, bm2.bmWidth, bm2.bmHeight, SRCCOPY);
// Display Instructions pDC->SetBkColor(RGB(255,0,0)); pDC->SetTextColor(RGB(192,192,192)); pDC->TextOut(480, 500, "Mouse Right Click to Stop/Start Special Effects"); pDC->TextOut(480, 515, "Mouse Left-Click to Show Child Window");
// CleanUp dcMem.SelectObject(pbmpOld) ;
return TRUE; }
//////////////////////////////////////////////////////////////////// // void CMdiMainClient::OnSize(UINT nType, int cx, int cy) { Default() ; // if the app is just starting up, save the window // dimensions and get out
if ((m_sizeClient.cx == 0) && (m_sizeClient.cy==0)) { m_sizeClient.cx = cx; m_sizeClient.cy = cy;
return ; }
// if the size hasn't changed, break and pass to default
if ((m_sizeClient.cx == cx) && ( m_sizeClient.cy == cy)) { return ; }
// window size has changed so save new dimensions and force // entire background to redraw, including icon backgrounds <  
1/2 1 2 下一页 尾页 |