Panel

From Valve Developer Community
< Zh
Jump to navigation Jump to search
English (en)中文 (zh)Translate (Translate)

vgui::Panel(en)是所有VGUI(en)元素的基类。作为屏幕上的矩形区域,它具备绘制自身、处理事件和管理子元素的能力。

Note.png注意:注意与传送门2建筑面板(en)区分

核心函数

基础控制

SetVisible(bool)
bool IsVisible()
bool IsFullyVisible()
不可见面板及其子元素不会参与绘制/更新,也不接收输入事件。IsFullyVisible()会递归检查父级可见性
SetEnabled(bool)
IsEnabled()
禁用状态下面板不接收输入,通常显示为灰色
OnThink()
面板可见时每帧调用
待完善: Think()是否已废弃?非可见面板是否仍会执行?
void OnTick()
通过ivgui()(en)->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(en)::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)
子元素添加事件回调

弹出窗口

PopupMakePopup(bool showTaskbarIcon = true,bool disabled = false)
bool IsPopup()
弹出式面板可突破父面板区域限制

脚本参数

用于.res布局文件的配置项:

fieldName  <字符串(en)>
控件名称(默认NULL)
wide  <整数(en)>
tall  <整数(en)>
初始尺寸
xpos  <整数(en)>
ypos  <整数(en)>
定位坐标(支持特殊修饰符):
  • xpos 300 - 距左边界300像素
  • xpos r300 - 距右边界300像素
  • xpos c0 - 水平居中
PinCorner  <choices>
锚点位置:
  • TOPLEFT(默认)
  • TOPRIGHT
  • BOTTOMLEFT
  • BOTTOMRIGHT
PinnedCornerOffsetX  <整数(en)>
PinnedCornerOffsetY  <整数(en)>
UnpinnedCornerOffsetX  <整数(en)>
UnpinnedCornerOffsetY  <整数(en)>
[待完善]
zpos  <整数(en)>
Z序(默认1,值越大显示层级越高)
IgnoreScheme  <布尔值(en)>
待完善: 是否忽略皮肤配置
visible  <布尔值(en)>
可见性
enabled  <布尔值(en)>
可用状态
tabPosition  <整数(en)>
Tab键聚焦顺序(0-255)
tooltiptext  <字符串(en)>
悬停提示文本(主机平台无效)
paintbackground  <布尔值(en)>
paintborder  <布尔值(en)>
背景/边框绘制开关(默认-1不修改)
AutoResize  <choices>
自适应调整模式:
  • NO(默认不调整)
  • RIGHT - 右边界
  • DOWN - 下边界
  • DOWNANDRIGHT - 右下双向