16,472
社区成员
发帖
与我相关
我的任务
分享
switch(message)
{
case WM_CREATE:
hdc=GetDC(hwnd);
g_pHero=new CHero(TEXT("IDB_HERO"),hInst,hdc);
//Ôݶ¨Îª 500¡Á 500 ½«À´Òª ·Åµ½ WM_SIZEÖÐ ÒÀµ±Ç°´óС¶ø¶¨
hBitmapBuffer=CreateCompatibleBitmap(hdc,g_iClientWidth,g_iClientHeight);
hdcMemBuffer=CreateCompatibleDC(hdc);
SelectObject(hdcMemBuffer,hBitmapBuffer);
//TEST ---OK...
//hBitmap=LoadBitmap(hInst,TEXT("IDB_HERO"));
//SelectObject(hdcMemBuffer,hBitmap);
ReleaseDC(hwnd,hdc);
return 0;
case WM_SIZE:
return 0;
case WM_LBUTTONDOWN:
/********************
测试,希望点左键,就把 g_pHero的 位图BitBlt出来
********************/
hdc=GetDC(hwnd);
g_pHero->draw(hdc);
g_pHero->draw(hdcMemBuffer);
//BitBlt(hdc,20,20,100,100,g_pHero->m_hdc,0,0,SRCCOPY);
//BitBlt(hdcMemBuffer,20,20,100,100,g_pHero->m_hdc,0,0,SRCCOPY);
ReleaseDC(hwnd,hdc);
return 0;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
BitBlt(hdc,0,0,g_iClientWidth,g_iClientHeight,
hdcMemBuffer,0,0,SRCCOPY);
/*
BitBlt(hdc,0,0,100,100,
g_pHero->m_hdc,0,0,SRCCOPY);
*/
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
DeleteDC(hdcMemBuffer);
delete g_pHero;
g_pHero=NULL;
PostQuitMessage(0);
return 0;
}
#define WIDTH_UNIT_COUNT 4 //λͼ×ÊÔ´ ÊÇ 4*4С·½¸ñ
#define HEIGHT_UNIT_COUNT 4
#define DIR_UP 0 //·½Ïò
#define DIR_DOWN 1
#define DIR_LEFT 2
#define DIR_RIGHT 3
class CHero
{
private:
HBITMAP m_hBitmap;
int iBitmapWidth,iBitmapHeight;
int iUnitWidth,iUnitHeight;
HDC m_hdc;
HINSTANCE m_hInst; //´´½¨ÎªÍ¼ÓÃ
// Ã泯·½Ïò 0ÉÏ 1Ï 2×ó 3ÓÒ
int m_dir;
int m_iPosX; //λÖà ¼Ç¼ʵ¼ÊλÖà ¼ÆËãµÄ¹¤×÷ÔÚÀàÍâ½øÐÐ
int m_iPosY;
public:
//TEST
//HDC m_hdc;
CHero(LPSTR imgName,HINSTANCE hProgInstance,HDC hdc);
void draw(HDC &hdcDest); //»æÖÆ Ó¦¸ÃÊÇÀàÀïÃæÓиö DC£¬´ÓÕâ¸öDCÍù Ä¿µÄDC ÉÏÃæ»
void run(); //Òƶ¯
~CHero();
};
#include<windows.h>
#include "glob.h"
#include "CHero.h"
CHero::CHero(LPSTR imgName,HINSTANCE hProgInstance,HDC hdc)
{
//¼ÓÔØλͼ×ÊÔ´
//this->hBitmap=LoadBitmap(hProgInstance,imgName);
m_hInst=hProgInstance;
//m_hBitmap=LoadBitmap(hProgInstance,TEXT("IDB_HERO"));
m_hBitmap=LoadBitmap(m_hInst,TEXT("IDB_HERO"));
BITMAP bitmap;
GetObject(m_hBitmap,sizeof(BITMAP),&bitmap);
this->iBitmapWidth=bitmap.bmWidth;
this->iBitmapHeight=bitmap.bmHeight;
this->iUnitWidth=iBitmapWidth/WIDTH_UNIT_COUNT;
this->iUnitHeight=iBitmapHeight/HEIGHT_UNIT_COUNT;
//³õʼ»¯ HERO DC
m_hdc=CreateCompatibleDC(hdc); //û SELECT ½øÈ¥£¿
SelectObject(hdc,m_hBitmap); //±£´æ×Å 4¡Á4¸ñËùÓеÄHEROͼƬ ÐèÒªµÄʱºòÒª Ó¦½øÐнØÈ¡
//³õʼ»¯ λÖà & ·½Ïò
m_iPosX=0;
m_iPosY=0;
m_dir=DIR_DOWN;
}
//»æÖÆ
void CHero::draw(HDC &hdcDest)
{
//ÔÝʱ²»·Ö·½Ïò...TODO..
BitBlt(hdcDest,20,20,100,100,
m_hdc,0,0,SRCCOPY);
}
//Òƶ¯
void CHero::run()
{
}
CHero::~CHero()
{
//TODO..
DeleteDC(m_hdc);
DeleteObject(m_hBitmap);
}