You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ImGui创建新窗口问题咨询:为何原窗口立即消失,改代码后正常?

ImGui窗口立即消失的原因解析

核心原理:ImGui的帧渲染机制

ImGui是基于帧渲染的GUI库——每一次渲染循环都会重新绘制所有可见的UI元素,窗口是否显示完全由ImGui::Begin的第二个参数(窗口可见性开关)决定。

最初窗口消失的问题根源

你最初遇到的窗口闪一下就消失,大概率是因为:

  • 控制窗口显示的变量(比如show_dialog)是局部临时变量,且被放在了渲染循环内部。
  • 每次进入渲染循环,这个变量都会被重新初始化(比如默认设为false,或者仅在第一次循环设为true,后续循环被重置)。
  • 当ImGui执行到Begin时,变量值已经是false,窗口不再被渲染,看起来就像立即消失。

给出的代码能正常显示的原因

你提供的代码能让窗口稳定显示,关键在于两点:

  1. 变量的持久化:bool show_dialog = true;这个变量是全局变量、类成员变量,或者渲染循环外的静态变量——它的值不会在每次渲染循环时被重置,每帧渲染时show_dialog都保持true,ImGui::Begin就会持续绘制窗口。
  2. 正确的窗口关闭绑定:ImGui::Begin的第二个参数&show_dialog是一个指针,当用户点击窗口的关闭按钮时,ImGui会自动把show_dialog设为false,此时窗口才会关闭。如果这个变量是临时的,ImGui修改的只是临时副本,不仅会导致窗口逻辑混乱,甚至可能引发野指针问题;而持久化变量能让这个开关逻辑正常工作。

另外补充:你代码里的SetNextWindowSize和SetNextWindowPos仅用于设置窗口的初始尺寸和位置,和窗口是否持续显示无关,它们只影响窗口第一次出现时的状态。


内容的提问来源于stack exchange,提问作者termda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 02:12:12