2013-01-31 45 views
1

我有一個窗口,它是黑上的一些靜態文本,我想用顏色選擇對話框在運行時改變它。我已經成功地獲得了顏色,現在我只需要改變文字!我已經讀過WM_CTLCOLORSTATIC消息是可以處理的消息,儘管這似乎只是在控件初始繪製到屏幕時。可以使用WM_PAINT嗎?在Win32中,如何更改STATIC文本的顏色?

用於設置顏色到目前爲止我是(在WM_CTLCOLORSTATIC情況下)代碼:

if ((HWND)lParam == GetDlgItem(hWnd, uLabelId) 
{ 
    SetBkMode((HDC)wParam, TRANSPARENT); 
    SetTextColor((HDC)wParam, crLabelTextColour); 
    return (BOOL)CreateSolidBrush(GetSysColor(COLOR_MENU)); 
} 

我可能會得到完全棒處理這個問題的錯誤的結束,所以任何援助將不勝感激!

回答

4

你是正確的軌道上WM_CTLCOLORSTATIC。如果您想更改顏色,則使控件失效(可能使用RedrawWindow)。這將導致它重新粉刷。當它重新繪製時,你的WM_CTLCOLORSTATIC處理程序將被再次調用。

0

幾點建議:

  • 你知道它的接收WM_CTLCOLORSTATIC,而不是控制本身的父對話框?

  • return (BOOL)...看起來奇怪 - 在功能這段代碼住?你應該從你的窗口過程返回一個LRESULT。

  • 你每次都滲出了刷 - 你應該保持單刷,每次返回刷。 Windows不清理畫筆。

+0

謝謝!我知道'WM_CTLCOLORSTATIC'是一個通知。 return語句就是我從另一個例子中得到的東西 - 我也不太喜歡它。謝謝你提醒我去刷 - 我要考慮這樣做! – BWHazel