ImGui 學習筆記(四)—— 實現每窗口背景色

ImGui 的窗口背景僅通過全局的 style 控制,這一點不方便于我們設置特定窗口的背景透明度(一般不用于調整顏色),分析代碼,我們可以找到?ImGui::RenderWindowDecorations 函數:

void ImGui::RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar_rect, bool title_bar_is_highlight, bool handle_borders_and_resize_grips, int resize_grip_count, const ImU32 resize_grip_col[4], float resize_grip_draw_size)
{ImGuiContext& g = *GImGui;ImGuiStyle& style = g.Style;ImGuiWindowFlags flags = window->Flags;// Ensure that Scrollbar() doesn't read last frame's SkipItems// 確保 Scrollbar() 不讀取上一幀的 SkipItemsIM_ASSERT(window->BeginCount == 0);window->SkipItems = false;window->DC.NavLayerCurrent = ImGuiNavLayer_Menu;// Draw window + handle manual resize// 繪制窗口 + 手動調整大小// As we highlight the title bar when want_focus is set, multiple reappearing windows will have their title bar highlighted on their reappearing frame.// 當設置了 want_focus 后,在我們突出顯示標題欄時,多個重新出現的窗口將在其重新出現的框架上突出顯示其標題欄。const float window_rounding = window->WindowRounding;const float window_border_size = window->WindowBorderSize;if (window->Collapsed){// Title bar only// 僅標題欄const float backup_border_size = style.FrameBorderSize;g.Style.FrameBorderSize = window->WindowBorderSize;ImU32 title_bar_col = GetColorU32((title_bar_is_highlight && g.NavCursorVisible) ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBgCollapsed);if (window->ViewportOwned)title_bar_col |= IM_COL32_A_MASK; // No alpha (we don't support is_docking_transparent_payload here because simpler and less meaningful, but could with a bit of code shuffle/reuse)RenderFrame(title_bar_rect.Min, title_bar_rect.Max, title_bar_col, true, window_rounding);g.Style.FrameBorderSize = backup_border_size;}else{// Window background// 窗口背景if (!(flags & ImGuiWindowFlags_NoBackground)){bool is_docking_transparent_payload = false;if (g.DragDropActive && (g.FrameCount - g.DragDropAcceptFrameCount) <= 1 && g.IO.ConfigDockingTransparentPayload)if (g.DragDropPayload.IsDataType(IMGUI_PAYLOAD_TYPE_WINDOW) && *(ImGuiWindow**)g.DragDropPayload.Data == window)is_docking_transparent_payload = true;ImU32 bg_col = GetColorU32(GetWindowBgColorIdx(window));if (window->ViewportOwned){//bg_col |= IM_COL32_A_MASK; // No alphaif (!(g.ConfigFlagsCurrFrame & ImGuiConfigFlags_TransparentBackbuffers)) {bg_col = (bg_col | IM_COL32_A_MASK);}if (is_docking_transparent_payload)window->Viewport->Alpha *= DOCKING_TRANSPARENT_PAYLOAD_ALPHA;}else{// Adjust alpha. For docking// 用于 dock 模式下調整 Alpha bool override_alpha = false;float alpha = 1.0f;if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasBgAlpha){alpha = g.NextWindowData.BgAlphaVal;override_alpha = true;}if (is_docking_transparent_payload){alpha *= DOCKING_TRANSPARENT_PAYLOAD_ALPHA; // FIXME-DOCK: Should that be an override?override_alpha = true;}if (override_alpha)bg_col = (bg_col & ~IM_COL32_A_MASK) | (IM_F32_TO_INT8_SAT(alpha) << IM_COL32_A_SHIFT);}
......
}

這里的?ImU32 bg_col = GetColorU32(GetWindowBgColorIdx(window)); 就是窗口要設置的背景顏色,想辦法改成跟窗口 id,name?或者 hash 綁定的數值即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72528.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72528.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72528.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python虛擬環境完全指南:用venv管理項目依賴,避免環境沖突的N個技巧

引言&#xff1a;當你的第3個Python項目開始報錯時… “明明在Demo項目能跑的代碼&#xff0c;移植到新項目就報錯&#xff1f;” 你可能正經歷著Python開發者的成年禮——依賴沖突。本文手把手教你用Python內置的venv模塊打造隔離的虛擬環境&#xff0c;從此告別pip install引…

【后端開發面試題】每日 3 題(十三)

?個人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;專欄地址&#xff1a;https://blog.csdn.net/newin2020/category_12903849.html &#x1f4da;專欄簡介&#xff1a;在這個專欄中&#xff0c;我將會分享后端開發面試中常見的面試題給大家&#xff0c;每天的題目都是獨…

C#入門學習記錄(三)C#中的隱式和顯示轉換

C#類型轉換&#xff1a;隱式與顯式轉換的機制與應用 在C#的強類型體系中&#xff0c;數據類型轉換是實現數據交互和算法邏輯的基礎操作。當數值類型范圍存在包含關系&#xff0c;或對象類型存在繼承層次時&#xff0c;系統通過預定義的轉換規則實現類型兼容處理。隱式轉換&…

Linux FILE文件操作2- fopen、fclose、fgetc、fputc、fgets、fputs驗證

目錄 1.fopen 打開文件 1.1 只讀打開文件&#xff0c;并且文件不存在 1.2 只寫打開文件&#xff0c;并且文件不存在 1.3 只寫打開文件&#xff0c;并且文件存在&#xff0c;且有內容 1.4 追加只寫打開文件&#xff0c;并且文件不存在 2. fclose 關閉文件 3. fgetc 讀取一…

如何檢查CMS建站系統的插件是否安全?

檢查好CMS建站系統的插件安全是確保網站安全的重要環節&#xff0c;對于常見的安全檢查&#xff0c;大家可以利用以下幾種有效的方法和工具&#xff0c;來幫你評估插件的安全性。 1. 檢查插件來源和開發者信譽 選擇可信來源&#xff1a;僅從官方插件庫或可信的第三方開發者處…

使用Dependency Walker和Beyond Compare快速排查dll動態庫損壞或被篡改的問題

目錄 1、問題描述 2、用Dependency Walker工具打開qr.dll庫&#xff0c;查看庫與庫的依賴關系以及接口調用情況&#xff0c;定位問題 3、使用Beyond Compare工具比較一下正常的msvcr100d.dll和問題msvcr100d.dll的差異 4、最后 C軟件異常排查從入門到精通系列教程&#xff…

2025.3.17總結

今天又是不開心得一天&#xff0c;回歸一個問題單&#xff0c;晚上看了下科目四&#xff0c;不到九點就領夜宵回去了。 每次干得不開心&#xff0c;總會有跑路得念頭&#xff0c;真的卷不動了&#xff0c;考個試考到抑郁&#xff0c;考到懷疑人生。還沒等他人辭退&#xff0c;…

【CF】Day9——Codeforces Round 953 (Div. 2) BCD

B. New Bakery 題目&#xff1a; 思路&#xff1a; 被標簽害了&#xff0c;用什么二分&#xff08; 很簡單的思維題&#xff0c;首先如果a > b&#xff0c;那么全選a就行了&#xff0c;還搞啥活動 否則就選 b - a 天來搞活動&#xff0c;為什么&#xff1f; 首先如果我…

【大模型】Transformer、GPT1、GPT2、GPT3、BERT 的論文解析

前言 在自然語言處理&#xff08;NLP&#xff09;和深度學習的快速發展中&#xff0c;Transformer模型和 GPT系列模型扮演了至關重要的角色。本篇博客旨在對這些開創性的論文進行介紹&#xff0c;涵蓋它們的提出時間、網絡結構等關鍵信息&#xff0c;能夠快速的理解這些模型的設…

Spring Security 教程:從入門到精通(含 OAuth2 接入)

Spring Security 教程&#xff1a;從入門到精通&#xff08;含 OAuth2 接入&#xff09; Spring Security 是 Spring 框架中備受推崇的安全模塊&#xff0c;廣泛應用于構建安全可靠的企業級應用程序。它提供了一套全面的解決方案&#xff0c;涵蓋身份認證&#xff08;Authenti…

OpenGL ES 入門指南:從基礎到實戰

引言&#xff1a;為什么需要 OpenGL ES&#xff1f; 在當今的嵌入式設備&#xff08;如智能手機、汽車儀表盤、智能家居中控屏&#xff09;中&#xff0c;流暢的圖形渲染能力是用戶體驗的核心。OpenGL ES&#xff08;OpenGL for Embedded Systems&#xff09; 作為行業標準&am…

java的WeakHashMap可以用來做緩存使用?強軟弱虛四種引用對比

在 Java 中&#xff0c;引用&#xff08;Reference&#xff09;機制用于管理對象的生命周期和垃圾回收。Java 提供了四種類型的引用&#xff1a;強引用&#xff08;Strong Reference&#xff09;、軟引用&#xff08;Soft Reference&#xff09;、弱引用&#xff08;Weak Refer…

51單片機指令系統入門

目錄 基本概念講解 一、機器指令? 二、匯編指令? &#xff08;一&#xff09;匯編指令的一般格式 &#xff08;二&#xff09;按字節數分類的指令 三、高級指令 總結? 基本概念講解 指令是計算機&#xff08;或單片機&#xff09;中 CPU 能夠識別并執行的基本操作命令…

使用 Docker 部署 MySQL 8

使用 Docker 部署 MySQL 8 詳細指南 MySQL 是一個廣泛使用的開源關系型數據庫管理系統。通過 Docker 部署 MySQL 8 可以快速搭建一個可移植、可擴展的數據庫環境。本文將詳細介紹如何使用 Docker 部署 MySQL 8&#xff0c;并講解如何根據需求配置 MySQL。 從拉取鏡像開始的詳細…

AtCoder Beginner Contest 397(ABCDE)

目錄 A - Thermometer 翻譯&#xff1a; 思路&#xff1a; 實現&#xff1a; B - Ticket Gate Log 翻譯&#xff1a; 思路&#xff1a; 實現&#xff1a; C - Variety Split Easy 翻譯&#xff1a; 思路&#xff1a; 實現&#xff1a; D - Cubes 翻譯&#xff1a…

數模AI使用教程(新) 2025.3.17

DeepseekR1doubao1.5大模型組合&#xff0c;數模智能體題目解答一等水平&#xff0c;另外也有統計建模、期刊復現智能體。 功能&#xff1a;問題重述、解釋數據文件、深度思考與邏輯梳理、問題關鍵點分析、知識整理、查找數據源、問題分析、使用方法推薦[會詢問要求]、模型建立…

Spring Cloud Gateway 生產級實踐:高可用 API 網關架構與流量治理解析

API 網關的核心價值 在分布式微服務架構中&#xff0c;API 網關作為系統流量的唯一入口&#xff0c;承擔著路由分發、安全防護、流量治理三大核心職責。Spring Cloud Gateway 基于響應式編程模型與 Netty 高性能網絡框架&#xff0c;提供靈活的路由規則、動態過濾器鏈和深度集…

在Pycharm配置conda虛擬環境的Python解釋器

〇、前言 今天在配置python解釋器時遇到了這樣的問題 經過一下午自行摸索、上網搜尋后&#xff0c;終于找到的解決的方案&#xff0c;遂將該方法簡要的記錄下來&#xff0c;以備后用&#xff0c;并希望能幫助到有同樣問題或需求的朋友:) 我所使用的軟件的版本如下&#xff0c;假…

寬帶(Broadband)

寬帶&#xff08;Broadband&#xff09; 是一種高速互聯網接入技術&#xff0c;能夠同時傳輸多種類型的數據&#xff08;如語音、視頻、文本等&#xff09;。與傳統的窄帶&#xff08;如撥號上網&#xff09;相比&#xff0c;寬帶提供了更高的數據傳輸速率和更穩定的連接&#…

集成學習(上):Bagging集成方法

一、什么是集成學習&#xff1f; 在機器學習的世界里&#xff0c;沒有哪個模型是完美無缺的。就像古希臘神話中的"盲人摸象"&#xff0c;單個模型往往只能捕捉到數據特征的某個側面。但當我們把多個模型的智慧集合起來&#xff0c;就能像拼圖一樣還原出完整的真相&a…