#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;
Комментариев нет:
Отправить комментарий