#winapi #visual_cpp
На форме расположен Static Text, требуется периодически изменять цвет текста, фон
остаётся исходным, дошёл до:
case WM_CTLCOLORSTATIC:
{
if( ((HWND)lParam)==GetDlgItem(hDlg, IDC_STATUS_DDE) )
{
SetBkMode((HDC) wParam, TRANSPARENT);
SetTextColor((HDC) wParam, RGB(0,0,255));
}
return (INT_PTR)GetStockObject(NULL_PEN);
}
В итоге текст IDC STATUS DDE изменяет цвет на синий, но на остальных Static Text,
изменился цвет фона на другой! Кто силён помогите разобраться!
Изменил код, как было рекомендовано @mega
case WM_CTLCOLORSTATIC:
if( ((HWND)lParam)==GetDlgItem(hDlg, IDC_STATUS_DDE) )
{
SetBkMode((HDC) wParam, TRANSPARENT);
SetTextColor((HDC) wParam, RGB(0,0,255));
return (INT_PTR)GetStockObject(NULL_BRUSH);
}
else return DefWindowProc(hDlg, message, wParam, lParam);
Заработало почти как и требовалось, но при очередном выводе в Static Text
SetDlgItemTextA (g_hwndMainForm, IDC_STATUS_DDE, szStatusDDE);
происходит наложение одной строки на другую, что я ещё не учёл!?
Ответы
Ответ 1
Во первых, результатом WM_CTLCOLORSTATIC должен быть дескриптор кисти, а не пера. Во вторых, Вы его возвращаете независимо от того, какой дескриптор пришел в lParam. Поэтому все компоненты закрашиваются одинаково. Возвращайте дескриптор в условии, а для всех остальных передавайте обработку WM_CTLCOLORSTATIC в стандартную процедуру окна.Ответ 2
Вот какой вариант получился, с цветом фона самого окна: case WM_CTLCOLORSTATIC: if (((HWND)lParam) == GetDlgItem(hWnd, 3)) { SetTextColor((HDC)wParam, RGB(0, 0, 255)); } return (LRESULT)GetSysColorBrush(COLOR_WINDOW); break;
Комментариев нет:
Отправить комментарий