问题标签 [imgui]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
226 浏览

c++ - 如何从 C++ 中的类调用 WNDCLASSEX 上的 wndproc

我正在尝试制作一个 ImGui DX9 窗口。但是,当我尝试在 WNDCLASSEX 结构上引用 wndproc 函数时出现错误。

当我尝试将wndproc函数预定义为静态时,出现错误:cannot overload static and non-static member functions with the same parameter types.

我已经尝试像这样直接调用该函数:menu::wnd_proc.

当我尝试调用该函数时,static我在函数上收到此错误:a value of type "LRESULT (__stdcall menu::*)(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)" cannot be used to initialize an entity of type "WNDPROC".

这是我的功能

这是ui.hpp头文件

0 投票
0 回答
50 浏览

c++ - ImGui 读取然后返回 const char

你好,我有一段时间没做编程了,所以我又开始学习了,决定做读/写进程内存,目前在这部分苦苦挣扎。

我找到了我的地址并想从地址中读取,但是我不知道如何返回该值。我不仅在使用 buffer.lengh 时遇到错误,而且还使用 buffer 作为 const char。

0 投票
1 回答
363 浏览

c++ - ImGui水印/叠加?

我想为我的 ImGui 制作水印/永久叠加。它应该看起来像图片中的左角。我怎样才能做到这一点?左角

0 投票
0 回答
102 浏览

c++ - 如何在命令设计模式中处理多个接收器和多个命令?

应用说明

我正在编写一个 GUI 驱动的应用程序,它将是 tileset/tilemap 编辑器。我决定使用命令设计模式来处理用户与 UI 组件的交互。

我的实现

我的应用程序类充当客户端/调用者,负责处理用户输入。我有指向两个 Receiver 类(TilesetEditor 和 TilemapEditor)的指针和指向存储当前使用的 Receiver 的地址的基类的指针。

客户端/调用者类:

有没有比在开始时简单地为两个编辑器分配内存然后只是更改基类指针指向的更好的方法来处理这种情况?另外应该如何处理/存储多个命令?

0 投票
1 回答
217 浏览

rust - 如何修改 Rust 闭包捕获的变量?

我正在尝试为 Rust 应用程序制作一个 GUI,看起来它对我很有效的是imgui-rs。我想做的就是从用户那里获取一些输入值,然后输出一个不断变化的 png。我在启动样板文件时遇到了一些麻烦,但提供的存储库的支持代码足以让我让 hello world 演示工作,但是当我尝试修改它以获取输入和更改显示时,我遇到了所有权问题。我现在要做的是让用户输入图像名称,然后打开该文件并将其显示在 GUI 中。

这是我现在拥有的(不包括上面链接的支持代码):

add_img我作为结构上的方法添加的函数System定义为:

现在,我得到了错误use of moved value system,无论我如何尝试排列数据,我似乎都无法避免 use-after-move 错误。

有没有更好的方法来组织我的代码,或者可能是一个不那么健壮的 Rust GUI 库,因为我不需要 99% 的 imgui 功能?

0 投票
1 回答
87 浏览

c++ - 围绕函数调用 std::thread() 的工作方式不同

这段代码有什么原因吗:

应该与这里的代码不同:

注意Main该类被定义为单例,这里是代码: main.h

上面的第一个示例无法初始化其中一个GLFW, GLEW, and ImGui是我用于我的程序的示例。我试图拆分程序的初始化,但后来我遇到了这个问题。当我进一步挖掘时,我达到了这一点,这实际上没有任何意义,为什么它不应该工作。基本上,它要么抛出异常,要么 ImGui 在运行时向我发送许多错误,说:

然而窗口打开了,我只在运行时通过线程示例得到这些。不是和另一个。

0 投票
0 回答
123 浏览

c++ - 函数调用的唯一标识符

我一直在尝试创建自己的 IMGUI 库,但找不到识别 IMGUI 调用问题的解决方案。

示例代码:

与 IMGUI 模式一样,UI 创建代码和相关逻辑运行每一帧。每个小部件调用都会立即返回它是否已在前一帧进行过交互。因此,我需要识别帧之间的小部件。这里的“小部件”通常是一个函数调用,或者是父小部件内的“嵌套”函数调用:

对于创建交互式小部件(按钮、单选、悬停、下拉)的每个调用,我都需要一些 ID。ID 被放入一个哈希表中,其中存储了一些与交互相关的信息(悬停、点击、边界等),下一帧将检查该表是否在调用相应的小部件 ID 时发生了某些事情。

因此,我需要一些方法来唯一标识小部件函数调用。

到目前为止我已经尝试过:小部件输入和当前小部件树状态的哈希。亲爱的 ImGui 库使用这种机制。我也试过了,我不得不说:它被设计为在某些时候失败。ID 必须是绝对唯一的,并且在循环/递归中使用少量小部件的 hello-world 实验中,我遇到了 2 种模式,这些模式会为以下哈希函数生成无限数量的冲突:

模式是:

所以简而言之,我需要一种保证绝对唯一性的机制。任何重复的 ID(在我的项目中)都会导致未定义的行为(具有重复 ID 的上下文菜单会导致无限递归)。

我尝试过的其他一些想法及其问题:

  • per-function-call increment:这很简单,但是如果下一帧包含不同数量的小部件,ID 将被移动并匹配不同的小部件。一个潜在的解决方案是每帧运行两次 UI 代码(第一次没有交互),但我担心是否有任何看不见的后果/问题
  • 使用对象地址:C++ 保证每个对象都有一个唯一的地址,但是:
    • 放入小部件(例如字符串)的数据地址可以在帧之间更改
    • 某些地址可能会在 1 帧内意外重用(例如ui.widget(str1 + str2)
    • 不保证字符串文字具有唯一地址
  • 使用__LINE__- 不能跨文件工作并且不支持动态小部件
  • 在 UI 对象中注册每个交互式小部件,但随后它使动态小部件复杂化,并且通过将小部件对象保留在框架之间的库用户代码中来破坏 IMGUI 的目的
  • 多种方法的某种组合?

我知道可能没有理想的解决方案,但我对任何支持/反对特定解决方案的论点感兴趣。由于多种原因,哈希不起作用(没有数据长度保证、相同的字符串、冲突、不同对象的相同二进制表示)

0 投票
1 回答
519 浏览

c++ - C++ std::vector 问题 (imgui)

这个问题我已经有一段时间了,我不确定如何解决它。

这是问题:

当我按下 add 时,它会将输入添加到向量中,但如果我再次按下 add 并更改文本,它会将向量的所有推送项更改为输入文本。任何人都可以帮忙吗?

0 投票
2 回答
2144 浏览

python-3.x - 关闭 Imgui 窗口:这看起来应该很容易。如何做到这一点?

我已经开始使用该imgui系统来可视化“任何东西”。我在我最初的几个小时里,并且遇到了似乎很常见的障碍。

然而,尽管我可以看到对 ImGui 的 C++ 版本的一些很好的支持(我将最终过渡到),但 python imgui 的内容大多是模糊的。

我正在寻找的是以下问题的解决方案:

一切正常。但是,窗口并没有关闭。我知道窗口不会关闭,因为它总是在每个循环中创建。

我正在寻找的是:

如何检测和识别特定窗口已关闭,并阻止它重新生成?

0 投票
0 回答
288 浏览

c++ - Emscripten OpenGL/Imgui 错误:_LIBCPP_BEGIN_NAMESPACE_STD _LIBCPP_END_NAMESPACE_STD

我想将 Imgui 示例编译为 wasm 这是错误:

这是 __config 错误行和下三行(781-784):

我看到这是名称空间的问题,但我不知道应该如何处理。我正在使用 Visual Studio 2019。当然代码编译可执行文件很好,但我想要 wasm。

这是代码(它只是带有 glew init 的 example_glfw_opengl3 示例):

更新:好的,我刚刚发现,这不是 imgui/opengl 问题,因为 hello world 也有同样的问题。所以这是 emscripten 或 Visual Studio 的问题。