📄 asl_guiobj.h
字号:
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 + -