下拉菜单(Dropdown)
下拉菜单提供一个按钮和一个可供用户选择的菜单,用户可以选择不同的选项且菜单会自动关闭。
注意
下拉菜单不支持水平布局。关于水平布局,请参考快速开始 - 使用 HiEasyX - 控件布局。
在 HiEasyX 中,下拉菜单的原型函数定义如下:
HXGInt Dropdown(DropdownProfile &Profile);
参数
参数 | 含义 | 默认取值 |
---|---|---|
Profile | 下拉菜单的资料结构体 | 无 |
返回值
当前选中的对象的下标,如果用户没有选择任何对象,则返回 -1。
资料结构体
按钮的资料结构体定义如下:
struct DropdownProfile {
ItemCollection Items;
ScrollerProfile scrollProfile{};
HXGInt SelectingItem = -1;
bool OnHover = false;
bool OnWorking = false;
HXGInt Width = 150;
};
变量 | 含义 | 默认取值 |
---|---|---|
Items | 菜单可供选择的对象 | 无 |
scrollProfile | API 内部变量 | |
SelectingItem | 当前选中的对象,如果没有选中任何对象,则为 -1 | -1 |
OnHover | API 内部变量 | |
OnWorking | 下拉菜单是否被折叠,如果被折叠,则为 false ,否则为 true | false |
Width | 下拉菜单的宽 | 150 |
ItemCollection
ItemCollection
的定义如下,ItemCollection
是 std::vector<Item>
的别名,用于表示可选择对象的集合:
using ItemCollection = std::vector<Item>;
Item
可选择对象结构体,Item
的定义大概如下:
struct Item {
HXString Title;
ButtonProfile Status;
Item(const HXString &Title) {
...
}
};
变量 | 含义 | 默认取值 |
---|---|---|
Title | 可选择对象的标题 | 无 |
Status | 可选择对象对应的按钮的资料结构体 | 无 |
示例
该示例代码同样可以在代码仓库下 /example/EasyX/Dropdown.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};
HX::DropdownProfile DropdownProfile;
DropdownProfile.Items = {HX::Item{HXStr("苹果")}, HX::Item{HXStr("香蕉")}, HX::Item{HXStr("葡萄")}, HX::Item{HXStr("橘子")},
HX::Item{HXStr("车厘子")}};
HX::DropdownProfile DropdownProfile1;
DropdownProfile1.Items = {HX::Item{HXStr("苹果")}, HX::Item{HXStr("香蕉")}, HX::Item{HXStr("葡萄")},
HX::Item{HXStr("橘子")},
HX::Item{HXStr("车厘子")}};
DropdownProfile1.SelectingItem = 2;
HX::DropdownProfile DropdownProfile2;
DropdownProfile2.Items = {HX::Item{HXStr("苹果")}, HX::Item{HXStr("香蕉")}, HX::Item{HXStr("葡萄")},
HX::Item{HXStr("橘子")},
HX::Item{HXStr("车厘子")}};
DropdownProfile2.SelectingItem = 2;
DropdownProfile2.OnWorking = true;
while (true) {
cleardevice();
HX::HXBegin();
ExMessage message{};
while (peekmessage(&message)) {
HX::PushMessage(HX::GetHXMessage(&message));
}
HX::Window(HXStr("下拉菜单控件示例"), windowProfile);
HX::Text(HXStr("普通下拉菜单"));
HX::Dropdown(DropdownProfile);
HX::Text(HXStr("预定选中的下拉菜单"));
HX::Dropdown(DropdownProfile1);
HX::Text(HXStr("预定选中且预先拉出菜单的下拉菜单"));
HX::Dropdown(DropdownProfile2);
HX::End();
HX::Render();
FlushBatchDraw();
Sleep(1);
}
return 0;
}