工作中遇到点击按钮开始执行某个用时较长的功能,但同时希望能失能与功能相关的各种输入区,以免影响功能正常执行。
解决思路:在当前window上的指定区域绘制子window,这样就能实现某些控件“失能”的效果。
注意点:绘制子window默认是在上一个控件之后,需要通过 SetCursorScreenPos 接口来重置绘制postion
示例代码如下:
{
static bool show_cover_window_b= false;
ImGui::Begin("Another Window", &show_another_window, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize);
ImGui::SetWindowSize(ImVec2(300, 600), ImGuiCond_Always);
ImGui::SetWindowPos(ImVec2(100, 100), ImGuiCond_Always);
ImGui::Text("Hello from another window!");
// ......
ImGui::Checkbox("show cover window", &show_cover_window_b);
if (show_cover_window_b)
{
// 这里绘制“覆盖”子window
ImGui::SetCursorScreenPos(ImVec2(100, 100));
ImGui::BeginChild("cover window", ImVec2(300, 80), false, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_MenuBar);
ImGui::EndChild();
}
ImGui::End();
}