///
-
Автор темы
- #1
Привет всем)
Сегодня я очередной раз делаю пасто-тему)
Меньше слов больше темы:
В ImGui есть такая штука, как ListBox
Всё хорошо, но есть одно ограничение, а конкретно то, что функция ListBox
в качестве элементов принимает указатель на массив строк, а я хочу передать
туда vector<string>, как же это сделать?
------------------------------------------------------------------------------------------------------------------------------------
Нам нужно описать простою CallBack функцию и перегрузить оригинальный ListBox
-----------------------------------------------------------------------------------------------------------------------------------
Credits: P45H3
Сегодня я очередной раз делаю пасто-тему)
Меньше слов больше темы:
В ImGui есть такая штука, как ListBox
в качестве элементов принимает указатель на массив строк, а я хочу передать
туда vector<string>, как же это сделать?
------------------------------------------------------------------------------------------------------------------------------------
Нам нужно описать простою CallBack функцию и перегрузить оригинальный ListBox
Код:
static auto vector_callback = [](void* vec, int idx, const char** out_text)
{
auto& vector = *static_cast<vector<string>*>(vec);
if (idx < 0 || idx >= static_cast<int>(vector.size())) { return false; }
*out_text = vector.at(idx).c_str();
return true;
};
Код:
bool ListBox(const char* label, int* currIndex, vector<string>& values)
{
if (values.empty()) { return false; }
return ListBox(label, currIndex, vector_callback,
static_cast<void*>(&values), values.size());
}
Код:
void AddProcessToVec() {
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
m_ProcNames.clear();
if (Process32First(hSnap, &pe)) {
while (Process32Next(hSnap, &pe)) {
m_ProcNames.push_back(pe.szExeFile);
}
}
}
Код:
static int VotedIdx = 0;
ImGui::ListBox("##List1", &VotedIdx, proc.m_ProcNames);
Credits: P45H3