如何在按钮按下的编辑框中更改文本颜色?的(Win32 / C ++)。
我知道如何更改文字字体(即在WM_COMMAND
,SendMessage()
中使用
WM_SETFONT
)。
在更改文本颜色时,我认为我需要WM_COMMAND
,WM_CTLCOLOREDIT
和SendMessage()
之间的互动,但不知道参数类型。
谢谢。
我已经想过如何在单个按钮上执行此操作。
还有一个问题。如果我将上面的代码用于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;
总是蓝色。
答案 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)
前者将立即重绘您的窗口,而后者不会重绘它,直到主窗口再次可用。