Panel
< Zh
Jump to navigation
Jump to search
vgui::Panel是所有VGUI元素的基类。作为屏幕上的矩形区域,它具备绘制自身、处理事件和管理子元素的能力。
核心函数
基础控制
SetVisible(bool)bool IsVisible()bool IsFullyVisible()- 不可见面板及其子元素不会参与绘制/更新,也不接收输入事件。
IsFullyVisible()会递归检查父级可见性 SetEnabled(bool)IsEnabled()- 禁用状态下面板不接收输入,通常显示为灰色
OnThink()- 面板可见时每帧调用待完善:
Think()是否已废弃?非可见面板是否仍会执行? void OnTick()- 通过
ivgui()->AddTickSignal()注册后定期触发
布局管理
bool IsProportional()SetProportional(bool)
证实:比例模式下,布局值基于640*480分辨率计算。例如坐标(64,48)始终对应屏幕10%位置,但无法自适应宽高比变化。新增的c/r.res关键字可解决此问题SetPos(), GetPos(), SetSize(), GetSize(), SetBounds(), GetBounds(), GetWide(), SetWide(), GetTall(), SetTall()- 位置/尺寸控制函数集
绘制系统
面板通过下列函数分层绘制(默认启用PaintBackground()和Paint()):
PaintBackground()SetPaintBackgroundEnabled(bool)- 绘制面板背景
Paint()SetPaintEnabled(bool)- 绘制面板内容
证实:不包含子元素 PaintBorder()SetPaintBorderEnabled(bool)SetBorder(IBorder *border)IBorder *GetBorder()- 边框绘制系统(需先调用
SetBorder())- 通过
IScheme::GetBorder()获取边框实例 - 参考
swarm/resource/sourcescheme.res中的定义示例
- 通过
PostChildPaint()SetPostChildPaintEnabled(bool)- 在子元素绘制完成后执行叠加绘制
SetSkipChildDuringPainting(Panel *child)- 跳过指定子元素绘制
证实:但不影响逻辑更新 SetAlpha(int)- 设置透明度(0-255,影响自身及子元素)
层级关系
面板采用单父节点多子节点的树形结构,非弹出式子元素受父面板区域约束。
父级控制
Panel *GetParent()VPANEL GetVParent()SetParent(Panel*)或SetParent(VPANEL)- 获取/设置父面板
bool HasParent(VPANEL)- 检测指定面板是否在父级链中
子级管理
int GetChildCount()Panel *GetChild(int index)Panel *FindChildByName(char* childName, bool recurseDown = false)- 子元素访问接口
OnChildAdded(VPANEL child)- 子元素添加事件回调
弹出窗口
脚本参数
用于.res布局文件的配置项:
fieldName<字符串>- 控件名称(默认NULL)
wide<整数>tall<整数>- 初始尺寸
xpos<整数>ypos<整数>- 定位坐标(支持特殊修饰符):
xpos 300- 距左边界300像素xpos r300- 距右边界300像素xpos c0- 水平居中
PinCorner<choices>- 锚点位置:
TOPLEFT(默认)TOPRIGHTBOTTOMLEFTBOTTOMRIGHT
PinnedCornerOffsetX<整数>PinnedCornerOffsetY<整数>UnpinnedCornerOffsetX<整数>UnpinnedCornerOffsetY<整数>- [待完善]
zpos<整数>- Z序(默认1,值越大显示层级越高)
IgnoreScheme<布尔值>- 待完善: 是否忽略皮肤配置
visible<布尔值>- 可见性
enabled<布尔值>- 可用状态
tabPosition<整数>- Tab键聚焦顺序(0-255)
tooltiptext<字符串>- 悬停提示文本(主机平台无效)
paintbackground<布尔值>paintborder<布尔值>- 背景/边框绘制开关(默认-1不修改)
AutoResize<choices>- 自适应调整模式:
NO(默认不调整)RIGHT- 右边界DOWN- 下边界DOWNANDRIGHT- 右下双向