imgui 的 AddRect 实现鼠标击穿
时间: 2024-05-06 07:18:01 浏览: 36
ImGui 的 `AddRect` 函数并没有直接支持鼠标击穿(mouse through)的功能,但是可以通过一些技巧来实现。
一种常见的做法是,在渲染矩形之前,先通过 `IsMouseHoveringRect` 函数判断鼠标是否在当前矩形范围内,如果是,则将当前矩形的 `Col` 属性设置为透明色(alpha 为0),这样鼠标点击事件就可以穿透到该矩形下面的元素上了。
以下是一个示例代码,展示了如何实现鼠标击穿功能:
```cpp
ImGui::Begin("My Window");
// 获取当前窗口的位置和尺寸
ImVec2 pos = ImGui::GetWindowPos();
ImVec2 size = ImGui::GetWindowSize();
// 判断鼠标是否在当前矩形范围内
if (ImGui::IsMouseHoveringRect(pos, ImVec2(pos.x + size.x, pos.y + size.y)))
{
// 如果是,则将当前矩形的 alpha 值设为 0
ImGui::GetWindowDrawList()->AddRectFilled(pos, ImVec2(pos.x + size.x, pos.y + size.y), IM_COL32(255, 255, 255, 0));
}
else
{
// 如果不是,则按照正常方式渲染矩形
ImGui::GetWindowDrawList()->AddRectFilled(pos, ImVec2(pos.x + size.x, pos.y + size.y), IM_COL32(255, 255, 255, 255));
}
ImGui::End();
```
上述代码中,通过 `GetWindowDrawList` 函数获取绘制窗口的 `ImDrawList` 对象,并使用 `AddRectFilled` 函数绘制一个矩形。根据鼠标是否在当前矩形范围内,设置矩形的 `Col` 属性。如果鼠标在矩形范围内,则将 alpha 值设为 0,否则设为 255,这样就可以实现鼠标击穿功能了。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)