ImGui创建新窗口问题咨询:为何原窗口立即消失,改代码后正常?
ImGui窗口立即消失的原因解析
核心原理:ImGui的帧渲染机制
ImGui是基于帧渲染的GUI库——每一次渲染循环都会重新绘制所有可见的UI元素,窗口是否显示完全由ImGui::Begin的第二个参数(窗口可见性开关)决定。
最初窗口消失的问题根源
你最初遇到的窗口闪一下就消失,大概率是因为:
- 控制窗口显示的变量(比如
show_dialog)是局部临时变量,且被放在了渲染循环内部。 - 每次进入渲染循环,这个变量都会被重新初始化(比如默认设为
false,或者仅在第一次循环设为true,后续循环被重置)。 - 当ImGui执行到
Begin时,变量值已经是false,窗口不再被渲染,看起来就像立即消失。
给出的代码能正常显示的原因
你提供的代码能让窗口稳定显示,关键在于两点:
- 变量的持久化:
bool show_dialog = true;这个变量是全局变量、类成员变量,或者渲染循环外的静态变量——它的值不会在每次渲染循环时被重置,每帧渲染时show_dialog都保持true,ImGui::Begin就会持续绘制窗口。 - 正确的窗口关闭绑定:
ImGui::Begin的第二个参数&show_dialog是一个指针,当用户点击窗口的关闭按钮时,ImGui会自动把show_dialog设为false,此时窗口才会关闭。如果这个变量是临时的,ImGui修改的只是临时副本,不仅会导致窗口逻辑混乱,甚至可能引发野指针问题;而持久化变量能让这个开关逻辑正常工作。
另外补充:你代码里的SetNextWindowSize和SetNextWindowPos仅用于设置窗口的初始尺寸和位置,和窗口是否持续显示无关,它们只影响窗口第一次出现时的状态。
内容的提问来源于stack exchange,提问作者termda
相关产品推荐
相关产品推荐

