MFC建立視窗及圖片動態顯示C++
阿新 • • 發佈:2018-12-30
#include <afxwin.h> class CMyWnd :public CFrameWnd { private: CDC * cdc; CBitmap *bmp; CBitmap *bmpBack; int order = 0; int pos = 500; public: CMyWnd() { Create(NULL, "我的視窗"); CClientDC dc(this); cdc = new CDC; cdc->CreateCompatibleDC(&dc); bmpBack = new CBitmap; bmpBack->m_hObject = LoadImage(NULL, "bg.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); bmp = new CBitmap; bmp->m_hObject = LoadImage(NULL,"boy.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); SetTimer(1, 100, NULL); }; DECLARE_MESSAGE_MAP() afx_msg void OnPaint(); afx_msg void OnTimer(UINT_PTR nIDEvent); afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); }; class CMyApp :public CWinApp { BOOL InitInstance(); }; BOOL CMyApp::InitInstance() { CMyWnd *pf = new CMyWnd(); pf->ShowWindow(m_nCmdShow); pf->UpdateWindow(); this->m_pMainWnd = pf; return TRUE; } CMyApp myApp;BEGIN_MESSAGE_MAP(CMyWnd, CFrameWnd) ON_WM_PAINT() ON_WM_TIMER() ON_WM_TIMER() ON_WM_KEYDOWN() END_MESSAGE_MAP() void CMyWnd::OnPaint() { CPaintDC dc(this); } void CMyWnd::OnTimer(UINT_PTR nIDEvent) { CClientDC dc(this); cdc->SelectObject(bmpBack); dc.BitBlt(0, 0, 800, 600, cdc, 0, 0, SRCCOPY); cdc->SelectObject(bmp); switch (order) { case 0: dc.BitBlt(pos, 250, 63, 154, cdc, 63, 0, SRCAND); dc.BitBlt(pos, 250, 63, 154, cdc, 0, 0, SRCPAINT); break; case 1: dc.BitBlt(pos, 250, 63, 154, cdc, 63, 154, SRCAND); dc.BitBlt(pos, 250, 63, 154, cdc, 0, 154, SRCPAINT); break; default: break; } order = (order == 0 ? 1 : 0); pos -= 10; CFrameWnd::OnTimer(nIDEvent); } 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做一些東西對遊戲,windows視窗的理解很有幫助。