2010-01-13 771 views
2

我正在更新黑色背景上的白色文本的Win32應用程序的GUI。這對我的內容很簡單。但我怎麼能改變我的孩子的窗口(標題欄,滾動條等)的顏色。我知道有WM_CTLCOLORDLG設置對話框的顏色。我也知道有WM_NCPAINT,但那會讓所有的繪畫(即滾動條)留給我。我想要的就是設置我選擇的顏色。Win32:我如何設置窗口標題,滾動條等的顏色?

+0

的Win32 API中在很大程度上照顧給予用戶使用Display控制面板小程序選擇她喜歡的主題時選擇的顏色。是的,你可以做你自己的繪畫來強制你的顏色選擇。 – 2010-01-13 13:20:18

+0

標題(標題欄)不是子窗口;它是窗口非客戶端('WM_NCPAINT'中的'NC')區域的一部分。 – MSalters 2010-01-13 13:20:45

+0

我正在談論有一個自己的標題欄的子窗口。該應用程序創建了其中的一些。他們的灰色標題上的黑色與現在是黑色的白色應用程序的其餘部分發生衝突。 – 2010-01-13 13:59:21

回答

1

您可以使用SetSysColors()更改窗口標題,邊框等的顏色(請參閱http://msdn.microsoft.com/en-us/library/ms724940(VS.85).aspx)。然而,這會改變所有窗口的顏色,而不僅僅是你的顏色,所以它至少是不友好的事情。

一種選擇是使用SetSysColors()在應用程序獲得焦點時更改活動窗口標題顏色,並在焦點丟失時將其重置爲默認值。但我會說這是klunky,並沒有真正保持良好的習慣(假設你的應用程序崩潰了,並且可能會有一些閃爍)。

WM_NCPAINT在那裏,所以你可以做這樣的事情。這是一個有點痛,但也許這是從創建非標準窗口阻止你... ;-)

+0

暫時更改系統範圍的設置是非常非常糟糕的做法。 – Koro 2010-01-13 18:54:13

+0

這就是我所說的。 WM_NCPAINT是要走的路 - 或者回到你的設計師那裏,讓他證明這個決定是正確的。 – AAT 2010-01-14 10:42:46

1

鉤GetSysColor()(使用類似微軟走彎路)