滑动条(Slider)
滑动条控件可以用于通过滑动滑块来调整对应的数值大小。
在 HiEasyX 中,根据目标数值的类型不同(int
和 float
)以及为了方便多元向量操作,滑动条总共有 2 个变体(float
变体和 int
变体),每个变体又各有四个版本(分别对应四种多元量)。但是使用起来大同小异。
这八种滑动条分别为:
void Slider1f(const HXString &Title, float &Value, SliderProfile1f &Profile);
void Slider2f(const HXString &Title, float (&Value)[2], SliderProfile2f &Profile);
void Slider3f(const HXString &Title, float (&Value)[3], SliderProfile3f &Profile);
void Slider4f(const HXString &Title, float (&Value)[4], SliderProfile4f &Profile);
void Slider1i(const HXString &Title, int &Value, SliderProfile1i &Profile);
void Slider2i(const HXString &Title, int (&Value)[2], SliderProfile2i &Profile);
void Slider3i(const HXString &Title, int (&Value)[3], SliderProfile3i &Profile);
void Slider4i(const HXString &Title, int (&Value)[4], SliderProfile4i &Profile);
篇幅所限,本文档只介绍以 Slider1f
为例展开介绍。其他的还烦请用户自行类比。以 f
结尾的接口是针对 float
的版本,以 i
结尾的接口是针对 int
的版本。
参数
参数 | 含义 | 默认取值 |
---|---|---|
Title | 滑动条的标题展示在滑动条的右侧 | 无 |
float/int[n] | 滑动条直接修改的目标变量 | 无 |
SliderProfileN(f/i) | 对应的滑动条的资料结构体 | 无 |
资料结构体
滚动框的资源结构体定义如下:
template <class Type>
struct SliderProfile {
bool InDrag = false;
Type MinValue;
Type MaxValue;
HXGInt Width = -1;
};
using SliderProfile1f = SliderProfile<float>;
using SliderProfile2f = std::array<SliderProfile<float>, 2>;
using SliderProfile3f = std::array<SliderProfile<float>, 3>;
using SliderProfile4f = std::array<SliderProfile<float>, 4>;
using SliderProfile1i = SliderProfile<int>;
using SliderProfile2i = std::array<SliderProfile<int>, 2>;
using SliderProfile3i = std::array<SliderProfile<int>, 3>;
using SliderProfile4i = std::array<SliderProfile<int>, 4>;
看起来很复杂,但是我们可以以 SliderProfile1f
为例子来简化:
struct SliderProfile1f {
bool InDrag = false;
float MinValue;
float MaxValue;
HXGInt Width = -1;
};
同理,SliderProfile2f
就相当于 SliderProfile1f[2]
,不过只是一个数组而已。
变量 | 含义 | 默认取值 |
---|---|---|
InDrag | 滑动条是否在被拖动,如果正在被拖动,则为 true 否则为 false | false |
MinValue | 滑动条的最小值 | 无 |
MaxValue | 滑动条的最大值 | 无 |
Width | 滑动条的宽,如果设置为小于等于零的值则为默认宽度(宽度=300/分量数) | -1 |
注意
注意,请确保你的 MaxValue
一定大于 MinValue
,否则会导致控件行为异常。
示例
该示例代码同样可以在代码仓库下 /example/EasyX/Slider.cpp
中找到。
#include <include/hex.h>
#include <include/impl/EasyX/hex_impl_easyx.h>
int main() {
initgraph(640, 480);
BeginBatchDraw();
HX::HXInitForEasyX();
HX::SetBuffer(GetWorkingImage());
setbkcolor(RGB(180, 180, 180));
HX::WindowProfile windowProfile;
windowProfile.Size = { 600, 400 };
while (true) {
cleardevice();
HX::HXBegin();
ExMessage message{};
while (peekmessage(&message)) {
HX::PushMessage(HX::GetHXMessage(&message));
}
HX::Window(HXStr("滑动条控件示例"), windowProfile);
HX::TextProfile titleText;
titleText.Font.Style = HXFontStyle::Bold;
titleText.Height = 30;
{
HX::Text(HXStr("Float 类型的 Slider"), titleText);
static float value1 = 0;
static HX::SliderProfile1f sliderProfile1;
sliderProfile1.MaxValue = 30;
sliderProfile1.MinValue = 0;
HX::Slider1f(HXStr("只有一个分量的 Slider"), value1, sliderProfile1);
static float value2[2] = {};
static HX::SliderProfile2f sliderProfile2;
sliderProfile2[0].MaxValue = 30;
sliderProfile2[0].MinValue = 0;
sliderProfile2[1].MaxValue = 10;
sliderProfile2[1].MinValue = 0;
HX::Slider2f(HXStr("有两个分量的 Slider,分别设置不同的最值"), value2, sliderProfile2);
static float value3[3] = {};
static HX::SliderProfile3f sliderProfile3;
sliderProfile3[0].MaxValue = 30;
sliderProfile3[0].MinValue = 0;
sliderProfile3[1].MaxValue = 10;
sliderProfile3[1].MinValue = 0;
sliderProfile3[2].MaxValue = 20;
sliderProfile3[2].MinValue = 0;
HX::Slider3f(HXStr("有三个分量的 Slider,分别设置不同的最值"), value3, sliderProfile3);
static float value4[4] = {};
static HX::SliderProfile4f sliderProfile4;
sliderProfile4[0].MaxValue = 30;
sliderProfile4[0].MinValue = 0;
sliderProfile4[1].MaxValue = 10;
sliderProfile4[1].MinValue = 0;
sliderProfile4[2].MaxValue = 20;
sliderProfile4[2].MinValue = 0;
sliderProfile4[3].MaxValue = 90;
sliderProfile4[3].MinValue = 0;
HX::Slider4f(HXStr("有四个分量的 Slider,分别设置不同的最值"), value4, sliderProfile4);
}
{
HX::Text(HXStr("Int 类型的 Slider"), titleText);
static int value1 = 0;
static HX::SliderProfile1i sliderProfile1;
sliderProfile1.MaxValue = 30;
sliderProfile1.MinValue = 0;
HX::Slider1i(HXStr("只有一个分量的 Slider"), value1, sliderProfile1);
static int value2[2] = {};
static HX::SliderProfile2i sliderProfile2;
sliderProfile2[0].MaxValue = 30;
sliderProfile2[0].MinValue = 0;
sliderProfile2[1].MaxValue = 10;
sliderProfile2[1].MinValue = 0;
HX::Slider2i(HXStr("有两个分量的 Slider,分别设置不同的最值"), value2, sliderProfile2);
static int value3[3] = {};
static HX::SliderProfile3i sliderProfile3;
sliderProfile3[0].MaxValue = 30;
sliderProfile3[0].MinValue = 0;
sliderProfile3[1].MaxValue = 10;
sliderProfile3[1].MinValue = 0;
sliderProfile3[2].MaxValue = 20;
sliderProfile3[2].MinValue = 0;
HX::Slider3i(HXStr("有三个分量的 Slider,分别设置不同的最值"), value3, sliderProfile3);
static int value4[4] = {};
static HX::SliderProfile4i sliderProfile4;
sliderProfile4[0].MaxValue = 30;
sliderProfile4[0].MinValue = 0;
sliderProfile4[1].MaxValue = 10;
sliderProfile4[1].MinValue = 0;
sliderProfile4[2].MaxValue = 20;
sliderProfile4[2].MinValue = 0;
sliderProfile4[3].MaxValue = 90;
sliderProfile4[3].MinValue = 0;
HX::Slider4i(HXStr("有四个分量的 Slider,分别设置不同的最值"), value4, sliderProfile4);
}
HX::End();
HX::Render();
FlushBatchDraw();
Sleep(1);
}
return 0;
}