按下按钮WIN32更改文本颜色

时间:2014-03-24 09:12:37

标签: c++ winapi

如何在按钮按下的编辑框中更改文本颜色?的(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_CTLCOLORSTATIC

if (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;

总是蓝色。

2 个答案:

答案 0 :(得分:3)

你需要

a)一个全局布尔值,用于指示颜色是否需要被设置(例如bEditRed

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

c)处理`WM_CTLCOLOREDIT'对话框proc中的消息:

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;

答案 1 :(得分:0)

爱德华回答的另一种方法是使用

RedrawWindow(windowHandle, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);

而不是

InvalidateRect(windowHandle, NULL, TRUE)

前者将立即重绘您的窗口,而后者不会重绘它,直到主窗口再次可用。