Изменить цвета фона Static Text при клике на кнопку в WinApi
У меня есть диалоговое модальное окно, в котором расположена кнопка и Static Text. При клике по кнопке я пытаюсь изменить цвет фона Static Text, но ничего не выходит. Ниже приведён основной код программы. Знаю, что с помощью сообщения WM_CTLCOLORSTATIC можно установить цвет, но это происходит только при открытии окна, а потом изменить его не получается. Пожалуйста, подскажите решение.
BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE hInst;
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow) {
DialogBox(hInstance, MAKEINTRESOURCE(DLG_MAIN), 0, DlgProc);
return 0;
}
BOOL CALLBACK DlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_INITDIALOG: {
hInst = GetModuleHandle(NULL);
}
break;
case WM_COMMAND: {
switch (LOWORD(wParam)) {
case IDC_BUTTON_SET_COLOR: {
/*изменение цвета фона*/
}
break;
}
}
break;
case WM_CTLCOLORSTATIC: {
static HBRUSH hBrush = CreateSolidBrush(RGB(230, 20, 20);
if (GetDlgCtrlID((HWND)lParam) == IDC_COLOR) { //IDC_COLOR - ID Static Text
HDC hdcStatic = (HDC)wParam;
SetBkColor(hdcStatic, RGB(230, 20, 20));
return (BOOL)hBrush;
}
}
break;
case WM_CLOSE: //закрытие диалогового окна
EndDialog(hwnd, 0);
return TRUE;
}
return FALSE;
}
UPD: Предложенное решение от человека ниже, но пока всё также не работает.
INT_PTR CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE hInst;
HDC hdcStatic;
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow) {
DialogBox(hInstance, MAKEINTRESOURCE(DLG_MAIN), 0, DlgProc);
return 0;
}
INT_PTR CALLBACK DlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_INITDIALOG: {
hInst = GetModuleHandle(NULL);
}
break;
case WM_COMMAND: {
switch (LOWORD(wParam)) {
case IDC_BUTTON_SET_COLOR: {
SetBkColor(hdcStatic, RGB(255, 198, 24));
}
break;
}
}
break;
case WM_CTLCOLORSTATIC: {
static HBRUSH hBrush = CreateSolidBrush(RGB(230, 20, 20);
if (GetDlgCtrlID((HWND)lParam) == IDC_COLOR) { //IDC_COLOR - ID Static Text
hdcStatic = (HDC)wParam;
SetBkColor(hdcStatic, RGB(colorCodeR, colorCodeG, colorCodeB));
return (LONG_PTR)hBrush;
}
}
break;
case WM_CLOSE: //закрытие диалогового окна
EndDialog(hwnd, 0);
return TRUE;
}
return FALSE;
}