📄 obj.h
字号:
#pragma once
#include <windows.h>
#include <commctrl.h>
class Obj
{
protected:
HIMAGELIST ImgList;//ImageList控件,用来读取bmp图像,自动生成mask和透明的渲染。
static HDC memdc;//所有对象共享的memdc,只初始化一次,提高渲染时的速度。但是多线程步安全。
int XPos,YPos;//渲染时,Obj的中心坐标
int FramesCount;//ImageList控件中图片的数目。
int CurrentFrame;//当前的图片
int XV,YV;//X,Y轴的速度
int ImgWidth,ImgHeight;//ImageList控件中每一张图片的大小
RECT Bound;//Obj活动的边界
BOOL Hide;//Obj是否可见
public:
Obj(void);//构造函数,初始化通用控件
~Obj(void);//析构函数
void Create(LPCTSTR lpbmp,int cx,int cGrow,COLORREF mask);//初始化Obj对象
virtual void Render(HDC destDC);//当图片可见,则渲染
void NextFrame();//下一张图片,可以用来形成循环的动画。
void SetPosition(int x,int y);//设置位置
void SetFrame(int Frame);//设置当前图片
virtual void NextState();//下个状态,一般在timer消息中调用,通过XV,YV计算新的位置
void SetXV(int xv);//设置X轴的速度
void SetYV(int yv);//设置Y轴的速度
virtual void SetBound(RECT rect);//设置边界
void SetHide(BOOL hide);//设置是否可见
int GetXPos() {return XPos;}
int GetYPos() {return YPos;}
int GetWidth() {return ImgWidth;}
int GetHeight() {return ImgHeight;}
BOOL IsHitObj(Obj &obj) //测试是否与其它Obj相交
{
return abs(this->XPos-obj.GetXPos()) < ((this->ImgWidth+obj.GetWidth())/2) &&
abs(this->YPos-obj.GetYPos()) < ((this->ImgHeight+obj.GetHeight())/2);
}
BOOL IsInBound() //是否在边界内
{
return ( XPos>(Bound.left+ImgWidth/2) && XPos<(Bound.right-ImgWidth/2) &&
YPos>(Bound.top+ImgHeight/2) && YPos<(Bound.bottom-ImgHeight/2)
);
}
BOOL IsOutBound()//是否在边界外。如果既不在边界内,也不在边界外,则在边界上。
{
return ( XPos<(Bound.left-ImgWidth/2) || XPos>(Bound.right+ImgWidth/2) ||
YPos<(Bound.top-ImgWidth/2) || YPos>(Bound.bottom+ImgHeight/2)
);
}
BOOL IsHide()//是否可见
{
return Hide;
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -