⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asl_guiobj.h

📁 泡泡堂单机版(含ASL游戏引擎源码 泡泡堂单机版(含ASL游戏引擎源码
💻 H
📖 第 1 页 / 共 2 页
字号:
class ASLWinControl : public ASLControl
{
public:
	// 构造函数
	ASLWinControl(void);
	
	// 析构函数
	virtual ~ASLWinControl(void) = 0;	// 纯虚基类
	
	// 绘制控件
	virtual void Draw(void) const;
	
	// 设置背景图片
	void SetBG(ASLBitmap &bmBackground);
	
	// 不可接受焦点
	virtual bool CanHaveFocus() const { return false; }

protected:
	ASLBitmap *m_pbmBackground;			// 背景图片指针
};

//-----------------------------------------------------------------------------
// 类名: ASLPanel
// 功能: 面板类
//       本类是ASLWinControl类的子类, 仅添加了创建函数. 
//-----------------------------------------------------------------------------
class ASLPanel : public ASLWinControl
{
public:
	void Create(ASLControl *pParent, int nLeft, int nTop, int nWidth, int nHeight);
	void Create(ASLControl *pParent, int nLeft, int nTop, ASLBitmap &bmBackground);
};

//-----------------------------------------------------------------------------
// 类名: ASLForm
// 功能: 窗体类
//       本类是ASLWinControl类的子类, 添加了鼠标拖动窗体的能力.
//-----------------------------------------------------------------------------
class ASLForm : public ASLWinControl
{
public:
	// 构造函数
	ASLForm(void);

	// 创建函数
	void Create(ASLControl *pParent, int nLeft, int nTop, int nWidth, int nHeight,
				ASLFont &fnt, COLOR cl);
	void Create(ASLControl *pParent, int nLeft, int nTop, ASLBitmap &bmBackground, 
				ASLFont &fnt, COLOR cl);
	
	// 设置热矩形. 鼠标在该矩形内按下, 将可以拖动窗口. 
	// 调用此函数前默认不可拖动窗口.
	void SetHotRect(RECT &rcHot) { m_rcHot = rcHot; m_bMovable = true; }
	
	// 改写的事件处理函数
	virtual void MouseDown(POINT pt, MouseButton mb);
	virtual void MouseUp(POINT pt, MouseButton mb);
	virtual void MouseMove(POINT pt);

private:
	RECT m_rcHot;			// 热矩形
	POINT m_ptOffset;		// 鼠标按下时在热矩形中的偏移
	bool m_bHolding;		// 鼠标是否正持有窗体
	bool m_bMovable;		// 窗体是否可移动
};

//-----------------------------------------------------------------------------
// 类名: ASLLabel
// 功能: 标签类
//       本类可显示一段静态文字.
//-----------------------------------------------------------------------------
class ASLLabel : public ASLControl
{
public:
	// 创建函数
	void Create(ASLControl *pParent, int nLeft, int nTop, LPCSTR szCaption);
	
	// 绘图函数
	virtual void Draw(void) const;
	
	// 设不可接受焦点
	virtual bool CanHaveFocus() const { return false; }
};

//-----------------------------------------------------------------------------
// 类名: ASLImage
// 功能: 图片类
//       本类可显示一幅静态图片
//-----------------------------------------------------------------------------
class ASLImage : public ASLControl
{
public:
	// 构造函数
	ASLImage(void);

	// 创建函数
	void Create(ASLControl *pParent, int nLeft, int nTop, ASLBitmap &bmImage);
	
	// 绘图函数
	virtual void Draw(void) const;
	
	// 设置图片
	void SetImage(ASLBitmap &bmImage);

	// 设不可接受焦点
	virtual bool CanHaveFocus() const { return false; }
	
private:
	ASLBitmap *m_pbmImage;		// 图片指针
};

//-----------------------------------------------------------------------------
// 类名: ASLPicButton
// 功能: 图片按钮类
//       本类是ASLButton, ASLCheckBox, ASLRadioButton类的抽象基类. 提供了处理
//       鼠标动作和加载按钮图片的能力.
//-----------------------------------------------------------------------------
class ASLPicButton : public ASLControl
{
public:
	// 按钮状态
	enum ButtonState { bsUp, bsHot, bsDown, bsDisabled };

public:
	// 构造函数
	ASLPicButton(void);
	
	// 绘图函数
	virtual void Draw(void) const = 0;
	
	// 设置按钮图片
	// 要求一行四列, 分别为按钮Up, Hot, Down, Disabled时的图片
	void SetGlyph(ASLBitmap &bmGlyph);
	
	// 设置按钮按下时的图片偏移
	void SetDownOffset(int x, int y);
	
	// 改写的事件处理函数
	virtual void MouseEnter(void);
	virtual void MouseLeave(void);
	virtual void MouseDown(POINT pt, MouseButton mb);
	virtual void MouseUp(POINT pt, MouseButton mb);

	// 向用户提供OnClick事件处理能力
	NotifyEvent OnClick;

protected:
	ASLBitmap *m_pbmGlyph;		// 按钮图片指针
	ButtonState m_bsState;		// 按钮状态
	POINT m_ptDownOffset;		// 按钮按下时的图片偏移
	bool m_bHolding;			// 鼠标是否持有按钮
	bool m_bHovering;			// 鼠标是否在按钮上方
};

//-----------------------------------------------------------------------------
// 类名: ASLButton
// 功能: 按钮类
//       本类模拟Windows系统中的按钮.
//-----------------------------------------------------------------------------
class ASLButton : public ASLPicButton
{
public:
	// 创建函数
	void Create(ASLControl *pParent, int nLeft, int nTop, ASLBitmap &bmGlyph,
				LPCSTR szCaption);
	
	// 绘制函数
	virtual void Draw(void) const;
	
	// 设置标题
	void SetCaption(LPCSTR szCaption);

private:
	POINT m_ptTextPos;		// 标题位置
};

//-----------------------------------------------------------------------------
// 类名: ASLCheckBox
// 功能: 复选框类
//       本类模拟Windows系统中的复选框.
//-----------------------------------------------------------------------------
class ASLCheckBox : public ASLPicButton
{
public:
	// 构造函数
	ASLCheckBox(void);

	// 创建函数
	void Create(ASLControl *pParent, int nLeft, int nTop, ASLBitmap &bmGlyph,
				LPCSTR szCaption);
	
	// 绘图函数
	virtual void Draw(void) const;
	
	// 设置图片
	// 要求一行六列, 前四列同ASLPicButton中的说明
	// 第五列为选中记号, 第六列为无效状态的选中记号图片
	void SetGlyph(ASLBitmap &bmGlyph);

	// 选取按钮
	void Check(void) { m_bChecked = true; }
	
	// 取消选择
	void UnCheck(void) { m_bChecked = false; }
	
	// 按钮是否被选中
	bool IsChecked(void) const { return m_bChecked; }

	// 改写的事件处理函数
	virtual void MouseUp(POINT pt, MouseButton mb);

protected:
	bool m_bChecked;		// 按钮是否被选中
};

//-----------------------------------------------------------------------------
// 类名: ASLRadioButton
// 功能: 单选框类定义
//       本类模拟Windows系统中的单选框.
//-----------------------------------------------------------------------------
class ASLRadioButton : public ASLCheckBox
{
public:
	// 构造函数
	ASLRadioButton(void);

	// 析构函数
	~ASLRadioButton(void);

	// 创建函数
	void Create(ASLControl *pParent, int nLeft, int nTop, ASLBitmap &bmGlyph,
				LPCSTR szCaption);

	// 选取按钮
	void Check(void);

	// 设本按钮所属组, 同组按钮只有一个能被选中
	void SetGroup(int nGroup) { m_nGroup = nGroup; }
	
	// 取本按钮所属组
	int GetGroup(void) const { return m_nGroup; }

	// 改写的事件处理函数
	virtual void MouseUp(POINT pt, MouseButton mb);
private:
	int m_nGroup;		// 本按钮所属组
};

//-----------------------------------------------------------------------------
// 类名: ASLScrollBar
// 功能: 滚动条类
//       本类模拟Windows系统中的滚动条.
//-----------------------------------------------------------------------------

// 滚动条类型(水平/垂直)
enum ScrollBarKind { sbHorizontal, sbVertical };

class ASLScrollBar : public ASLControl
{
public:
	// 构造函数
	ASLScrollBar(void);

	// 创建函数
	void Create(ASLControl *pParent, int nLeft, int nTop, ScrollBarKind sbKind, 
				ASLBitmap &bmSlider, int nLength);

	// 绘制函数
	virtual void Draw(void) const;	
	
	// 设置滑块图片
	void SetSlider(ASLBitmap &bmSlider);
	
	// 设滚动条长度
	void SetLength(int nLength);
	
	// 取滑块位置
	int GetPosition(void) const;
	
	// 设置滑块位置
	void SetPosition(int nPos);
	
	// 设置滚动条类型
	void SetKind(ScrollBarKind sb) { m_sbKind = sb; }	
	
	// 设置滑块位置范围
	void SetRange(int min, int max) { m_nMin = min; m_nMax = max; }
	
	// 改写的事件处理函数
	virtual void MouseDown(POINT pt, MouseButton mb);
	virtual void MouseUp(POINT pt, MouseButton mb);
	virtual void MouseMove(POINT pt);

	// 向用户提供处理OnChange, OnScroll事件的能力
	NotifyEvent OnChange;
	NotifyEvent OnScroll;

private:
	ScrollBarKind m_sbKind;			// 滚动条类型
	ASLBitmap *m_pbmSlider;			// 滑块图片指针
	int m_nOffset;					// 鼠标在滑块上的偏移
	int m_nSliderPos;				// 滑块位置(物理位置, 仅内部使用)
	int m_nMin;						// 滑块位置最小值(逻辑位置)
	int m_nMax;						// 滑块位置最大值(逻辑位置)
	bool m_bHolding;				// 鼠标是否持有滑块
};

//-----------------------------------------------------------------------------
// 类名: ASLEdit
// 功能: 文本框类
//       本类模拟Windows系统中的文本框. 不提供鼠标选择及剪贴板功能, 暂不支持中文.
//-----------------------------------------------------------------------------

// 光标类型(垂直/水平)
enum CaretStyle { csVertical, csHorizontal };

class ASLEdit : public ASLControl
{
public:
	// 构造函数
	ASLEdit(void);

	// 创建函数
	void Create(ASLControl *pParent, int nLeft, int nTop, int nWidth);
	
	// 绘制函数
	virtual void Draw(void) const;
	
	// 更新函数, 用于使光标闪烁
	virtual void Update(float fDelta);
	
	// 设置父控件
	void SetParent(ASLControl *pParent);
	
	// 设置字体
	void SetFont(ASLFont &fnt);
	
	// 设置文本内容
	void SetText(LPCSTR szText) { m_strText = szText; }
	
	// 取文本内容
	LPCSTR GetText(void) const { return m_strText.c_str(); }
	
	// 设置光标颜色
	void SetCaretColor(COLOR cl) { m_clCaretColor = cl; }
	
	// 设置光标类型
	void SetCaretStyle(CaretStyle cs) { m_csStyle = cs; }

	// 改写的事件处理函数
	virtual void MouseDown(POINT pt, MouseButton mb);
	virtual void KeyPress(char cKey);
	virtual void KeyDown(DWORD dwKey, ShiftState ss);

private:
	// 移动光标
	void MoveCaret(int nOffset);

private:
	std::string	m_strText;			// 文本内容
	float		m_fTime;			// 计时器
	int			m_nCaretPos;		// 光标位置
	int			m_nCharWidth;		// 字符宽度
	bool		m_bShowCaret;		// 是否显示光标
	COLOR		m_clCaretColor;		// 光标颜色
	CaretStyle	m_csStyle;			// 光标类型
};

} // namespace ASL

#endif // ASL_GUIOBJ_INCLUDE

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -