通常,標準控件使用的大多數顏色都可以從GetSysColor
獲得,我運行了所有常量(0-30)的所有COLOR_
測試,並將其與組框邊框的顏色進行比較,他們匹配。我使用XP,並且組框邊框的顏色爲0xD0D0BF
。獲取組框邊框的系統顏色
如何獲取用於繪製組框邊框的系統顏色?
通常,標準控件使用的大多數顏色都可以從GetSysColor
獲得,我運行了所有常量(0-30)的所有COLOR_
測試,並將其與組框邊框的顏色進行比較,他們匹配。我使用XP,並且組框邊框的顏色爲0xD0D0BF
。獲取組框邊框的系統顏色
如何獲取用於繪製組框邊框的系統顏色?
使用「經典」主題(在XP上,或以前版本的Windows中唯一的主題),組框邊框不是單一的顏色。它實際上是一條「蝕刻」線,由兩條不同顏色的線組成。每種顏色都有COLOR_*
值,但您不想嘗試以這種方式重新創建線條。相反,使用GDI的DrawEdge
函數和EDGE_ETCHED
標誌。
但是,如果啓用了主題,則組框邊框實際上是是單一顏色,並且該顏色因所選主題而異。無法使用GetSysColor
檢索主題顏色,因爲它們沒有對應的COLOR_*
值。在構思主題之前,該API是發明了長。相反,有一套全新的主題API。你在這裏感興趣的是GetThemeColor
,但爲了使用它,你還需要OpenThemeData
和CloseThemeData
。
棘手的部分是搞清楚要傳遞給OpenThemeData
函數的內容。 This question可能有幫助。 A組框控件實際上是一種特殊類型的按鈕控制的,所以你想要的風格是:
BUTTON
BP_GROUPBOX
GBS_NORMAL
(也可能是GBS_DISABLED
)TMT_BORDERCOLOR
請確保您的代碼在主題被禁用時具有適當的後備支持!使用函數在運行時動態確定並選擇適當的繪圖代碼路徑。
編輯:上的XP虛擬機經過一番測試,我無法找到合適的TMT_*
屬性ID指定要得到一個組框的邊框正確的顏色。我不確定那是怎麼回事。但是你可以得到繪製您使用DrawThemeBackground
功能邊界:
HTHEME hTheme = OpenThemeData(grpBox->m_hWnd, L"Button");
DrawThemeBackground(hTheme, hDC, BP_GROUPBOX, GBS_NORMAL, &rcArea, NULL);
CloseThemeData(hTheme);
不幸的是,這並沒有告訴你如何得到的顏色值本身。
感謝您經過這麼多努力來研究這個答案(即使我已經將它標記爲答案!)。 – Matt
顯然沒有直接的方法來獲得顏色。我列舉了所有'TMT_ *'值,並且它們中的_none_與組合框實際使用的值相匹配。 TMT_BORDERCOLORHINT可能會關閉。 –
問題可能在於它不是單一顏色。例如,如果它是一個漸變。如果'TMT_BORDERCOLORHINT'接近,那可能是解釋。也有助於解釋爲什麼它被稱爲「提示」。 –