如何在按钮按下时从编辑框更改文本颜色? (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;
始终是蓝色。
最佳答案
你需要
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/