【发布时间】:2014-03-24 09:12:36
【问题描述】:
如何在按钮按下时从编辑框中更改文本颜色? (Win32/C++)。
我知道如何更改文本字体(即在WM_COMMAND、SendMessage() 中使用
WM_SETFONT)。
在更改文本颜色时,我认为我需要WM_COMMAND、WM_CTLCOLOREDIT 和SendMessage() 之间的交互,但不知道使用哪种参数。
谢谢你。
我已经想出了如何在单个按钮上执行此操作。
请再问一个问题。如果我将上面的代码用于 3 个不同的按钮,它的行为将不符合预期。有一个sn-p :
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;
总是蓝色。
【问题讨论】:
-
我真的看不出任何明显的逻辑错误 - 尝试放入调试语句和/或断点以查看变量的值以及为什么它总是显示为蓝色?
-
那是我的烂摊子,变量没有声明为静态的。感谢您的回复。