2011-05-08 31 views
1

我的目標是繪製一個不是矩形的組框,而是將角切掉。我並不是說只是剪掉角落,而是有一個連續的封閉路徑,角落是「縮進」的。我希望這可以匹配當前主題的顏色/風格。獲取Group Box行的主題屬性

我注意到在Windows XP上,組框有1個像素的灰線,但在Windows 7上有一個灰線旁邊的白線(內部的白線除外底部位於灰線下方)。

您可以使用像這樣得到一組框的文本標籤的顏色:

COLORREF cref; 
GetThemeColor(hTheme, BP_GROUPBOX, GBS_NORMAL, TMT_TEXTCOLOR, &cref); 

所以,我試圖找出如何讓顏色(S)和/或性能然後(我希望能夠)通過單獨繪製我想要的每一個形狀來繪製我想匹配Group Box樣式的線條。我不確定使用什麼屬性來描述這些線條,或者DrawRect函數是否會使用合適的Pen繪製3D效果。有沒有辦法設置畫筆來繪製這些3D效果(雙陰影平行線)?

謝謝。

+0

一個組框不關注主題,無論窗口背景顏色如何,它們總是灰色和白色。嘗試一下。不能從主題api中獲得。只需對它們進行硬編碼。 – 2011-05-08 20:09:31

+0

在Windows經典主題中,它們有方形角。在Windows XP + 7上,它們是四捨五入的。當主題顏色改變時,文本標籤的顏色會發生明顯的變化。我不能硬編碼,因爲那樣他們就不能匹配不同主題或Windows版本的其他組框。 – JohnPS 2011-05-09 04:19:03

回答

1

我總覺得有關groupboxes的事情是,它們真的是一種按鈕風格。 (BS_GROUPBOX)。

在VSCLASS_BUTTON中使用主題部分BP_GROUPBOX爲主題的組框(XP和更高版本與經典模式關閉)。您可以使用常用的主題API來獲取和繪製。如果你的組框需要文本,你可以使用DrawThemeText。

也有API用於繪製非主題組框(例如DrawEdge),但我不記得細節,也不太可能需要它們。與往常一樣,我將指出,複製控件的行爲總是比你想象的要難。

Martyn

+0

謝謝。你是指DrawThemeEdge?如何爲這個函數獲得正確的參數uEdge和uFlags? – JohnPS 2011-05-09 04:30:01

+0

我發現DrawThemeBackground使用iPartId == BP_GROUPBOX == 4和iStateId == GBS_NORMAL == 1繪製匹配的組框邊框。這個函數需要RECT *和剪切RECT *,所以我應該能夠拼湊出我想要的形狀。 – JohnPS 2011-05-09 20:02:13