问题起因
演示代码
if (ImGui::Button("Test1")) {
::OutputDebugStringA("Btn1 clicked");
}
if (ImGui::Button("Test1")) {
::OutputDebugStringA("Btn2 clicked");
}
LabelLabel
在 Demo 中有个 Stack Tool 可以直观地查看栈情况。
解决方案
##
if (ImGui::Button("Test1##id1")) {
::OutputDebugStringA("Btn1 clicked");
}
if (ImGui::Button("Test1##id2")) {
::OutputDebugStringA("Btn2 clicked");
}
##
方法二:使用 PushID/PopID 方法
ImGui::PushID(0);
if (ImGui::Button("Test1")) {
::OutputDebugStringA("Btn1 clicked");
}
ImGui::PopID();
ImGui::PushID(1);
if (ImGui::Button("Test1")) {
::OutputDebugStringA("Btn2 clicked");
}
ImGui::PopID();
PushIDPopID
知识点
ButtonInputLabel
mGui::Button("##id")
###Label
sprintf(buf, "My game (%f FPS)###MyGame", fps);
Begin(buf);
这样在栈里的实际ID是"MyGame",而不是整个字符串。