如何在按钮按下时从编辑框更改文本颜色? (Win32 / C++)。
我知道如何更改文本字体(即在WM_COMMANDSendMessage()中使用WM_SETFONT)。
关于更改文本颜色,我认为我需要在WM_COMMANDWM_CTLCOLOREDITSendMessage()之间进行交互,但不知道使用哪种参数。
谢谢。

我已经知道如何在单个按钮上执行此操作。
请再提一个问题。如果我将上面的代码用于3个不同的按钮,则它的行为不会达到预期的效果。有一个片段:case IDC_BUTTON3: textFlagRed = textFlagRed; textFlagBlue = !textFlagBlue; textFlagGreen = !textFlagGreen; InvalidateRect(textArea2, NULL, TRUE); break; case IDC_BUTTON4: textFlagGreen = textFlagGreen; textFlagBlue = !textFlagBlue; textFlagRed = !textFlagRed; InvalidateRect(textArea2, NULL, TRUE); break; case IDC_BUTTON5: textFlagBlue = textFlagBlue; textFlagRed = !textFlagRed; textFlagGreen = !textFlagGreen; InvalidateRect(textArea2, NULL, TRUE); break;
WM_CTLCOLORSTATICif (textFlagRed && (HWND)lParam == textArea2) { HBRUSH hbr = (HBRUSH) DefWindowProc(hwnd, message, wParam, lParam); SetTextColor((HDC) wParam, RGB(255, 0, 0)); return (BOOL) hbr; } else if (textFlagBlue && (HWND)lParam == textArea2) { HBRUSH hbr = (HBRUSH) DefWindowProc(hwnd, message, wParam, lParam); SetTextColor((HDC) wParam, RGB(0, 0, 255)); return (BOOL) hbr; } else if (textFlagGreen && (HWND)lParam == textArea2) { HBRUSH hbr = (HBRUSH) DefWindowProc(hwnd, message, wParam, lParam); SetTextColor((HDC) wParam, RGB(0, 255, 0)); return (BOOL) hbr; } break;
始终是蓝色。

最佳答案

你需要

a)一个全局 bool(boolean) 值,指示是否需要更改颜色(例如bEditRed)

b)按下按钮:设置/切换bEditRed并使编辑框InvalidateRect(hWndEdit, NULL, TRUE)无效

c)在对话过程中处理“WM_CTLCOLOREDIT”消息:

case WM_CTLCOLOREDIT:
    if (bEditRed && (HWND)lParam == hWndEdit)
    {   HBRUSH hbr = (HBRUSH) DefWindowProc(hDlg, iMessage, wParam, lParam);
        SetTextColor((HDC) wParam, RGB(255, 0, 0));
        return (BOOL) hbr;
    }
    return FALSE;

关于c++ - 更改按钮WIN32上的文本颜色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22605087/

10-09 13:42