跳到主要内容

下拉菜单(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菜单可供选择的对象
scrollProfileAPI 内部变量
SelectingItem当前选中的对象,如果没有选中任何对象,则为 -1-1
OnHoverAPI 内部变量
OnWorking下拉菜单是否被折叠,如果被折叠,则为 false,否则为 truefalse
Width下拉菜单的宽150

ItemCollection

ItemCollection 的定义如下,ItemCollectionstd::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;
}