MFC创建人物行走动画C++

xiaoxiao2025-04-13  13

本工程使用MFC框架,制作镂空图的显示和刷新。 因为图片扣的不好的原因,会有边框。 下面是代码:

#include <afxwin.h> class CMyWnd :public CFrameWnd { private: CDC * cdc; CBitmap* mbmp[12]; CBitmap* sbmp[12]; CRect rect; char m_szFileName[20]; char s_szFileName[20]; int order = 0; int pos = 1000; public: CMyWnd() { Create(NULL, "我的窗口"); CClientDC dc(this); GetClientRect(rect); cdc = new CDC; cdc->CreateCompatibleDC(&dc); for (int i = 0; i < 12; i++) { mbmp[i] = new CBitmap; sbmp[i] = new CBitmap; sprintf_s(m_szFileName, "ER0%dM.bmp", (i + 1)); mbmp[i]->m_hObject = LoadImage(NULL, m_szFileName, IMAGE_BITMAP, 200, 300, LR_LOADFROMFILE); sprintf_s(s_szFileName, "ER0%dS.bmp", (i + 1)); sbmp[i]->m_hObject = LoadImage(NULL, s_szFileName, IMAGE_BITMAP, 200, 300, LR_LOADFROMFILE); } }; DECLARE_MESSAGE_MAP() afx_msg void OnPaint(); afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); }; CMyWnd *pf; UINT myProc(LPVOID pParam) { while (1) { pf->Invalidate(); Sleep(200); } } class CMyApp :public CWinApp { BOOL InitInstance(); }; BOOL CMyApp::InitInstance() { pf = new CMyWnd(); pf->ShowWindow(m_nCmdShow); pf->UpdateWindow(); this->m_pMainWnd = pf; AfxBeginThread(myProc, NULL); return TRUE; } CMyApp myApp;BEGIN_MESSAGE_MAP(CMyWnd, CFrameWnd) ON_WM_PAINT() ON_WM_KEYDOWN() END_MESSAGE_MAP() void CMyWnd::OnPaint() { CPaintDC dc(this); cdc->SelectObject(mbmp[order]); dc.BitBlt(pos, rect.bottom/2, 200, 300, cdc, 0, 0, SRCAND); cdc->SelectObject(sbmp[order]); dc.BitBlt(pos, rect.bottom / 2, 200, 300, cdc, 0, 0, SRCPAINT); order = (11 == order) ? 0 : ++order; pos -= 10; if (pos <= 100) { pos = 1000; } } void CMyWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if (nChar == VK_RIGHT) { pos += 10; } if (nChar == VK_LEFT) { pos -= 10; } CFrameWnd::OnKeyDown(nChar, nRepCnt, nFlags); }

希望对你们有帮助,学习一下MFC也会有用的哦!

转载请注明原文地址: https://www.6miu.com/read-5028138.html

最新回复(0)