2011-04-06 77 views
0

我使用一些按鈕控件創建對話框窗口。我想要按鈕單獨着色。我搜索並找到了我認爲應該使用的內容WM_CTLCOLORBTN Message如何獲取畫筆的句柄,Win32 C++

如上所述,返回值應該是「刷柄」。

我可以創建一個刷子,例如像這樣:

HBRUSH blueBrush=CreateSolidBrush(RGB(0,255,0)); 

,但我怎麼手柄回到這個刷?

編輯:我的消息處理函數定義爲

LRESULT CALLBACK ClientDlgProc(...) 

,如果我嘗試返回blueBrush我得到這個錯誤:

錯誤C2440:「迴歸」:無法從「HBRUSH」轉換爲'LRESULT'

+0

如果有人知道更好的着色我的按鈕的方式,請讓我知道。 – Moberg 2011-04-06 10:58:08

+0

下面的答案是正確的,但請注意,您在此處有泄漏。您需要將HBRUSH存儲在對話框的某個地方以及之後的DestroyObject()中。通常它在WM_INITDIALOG中創建並在WM_DESTROY中銷燬。 – ymett 2011-04-06 11:09:35

+0

我只是還沒有得到那麼多^^' – Moberg 2011-04-06 11:12:47

回答

2

我很確定CreateSolidBrush返回的值是句柄(HBRUSH中的H代表'句柄')。

+0

噢好吧。我想我真正的問題是如何將其作爲LRESULT返回,請參閱原始問題中的編輯。 – Moberg 2011-04-06 11:12:03

+0

在這種情況下,一個簡單的轉換就可以做到這一點:return(LRESULT)blueBrush; – 2011-04-06 11:16:42

+0

謝謝,它的作品,按鈕變成綠色..但它是平坦的,沒有邊框,我看不到文字。 Doh :( – Moberg 2011-04-06 11:31:16

0

HBRUSH是刷子的手柄。返回blueBrush