LRESULT lRet = 0; // return value for our WindowProc.
COLORREF crBk = RGB(255,0,0); // use RED for Background.
...
case WM_CTLCOLORSTATIC:
{
HDC hdc = (HDC)wParam;
HWND hwnd = (HWND)lParam;
// if multiple edits and only one should be colored, use
// the control id to tell them apart.
//
if (GetDlgCtrlId(hwnd) == IDC_EDIT_RECOLOR)
{
SetBkColor(hdc, crBk); // Set to red
SetDCBrushColor(hdc, crBk);
lRet = (LRESULT) GetStockObject(DC_BRUSH); // return a DC brush.
}
else
{
lRet = DefWindowProc(hwnd, uMsg, wParam, lParam);
}
}
break;
...
case WM_CTLCOLOREDIT:
{
HDC hdc = (HDC)wParam;
SetTextColor(hdc, yourColor); // yourColor is a WORD and it's format is 0x00BBGGRR
return (LRESULT) GetStockObject(DC_BRUSH); // return a DC brush.
}
...
5条答案
按热度按时间nhaq1z211#
在编辑控件的父级中,处理WM_CTLCOLORSTATIC消息,此消息的wParam是编辑控件将要绘制的HDC,对于大多数CTLCOLOR消息,如果您在此DC中设置文本和背景颜色,则控件将使用您设置的颜色。
你也可以返回一个HBRUSH,控件将使用它来进行任何画笔绘制,但是很多控件并不经常使用画笔,所以这对一些CTLCOLOR消息的效果有限。这里你最好的办法是返回DC画笔,并设置DC画笔的颜色以匹配DC的BkColor。
wmtdaxz32#
WM_CTLCOLORSTATIC用于静态文本控件。
简单地说,您可以在winproc中执行此操作:
如果您有多个编辑控件,您可以使用项目ID和lParam来检查需要变更的控件。
wqnecbli3#
WM_CTLCOLOREDIT允许你设置文本和背景颜色(+画笔),如果你想要更多的控制,你必须子类化和绘制自己
rdrgkggo4#
你可以这样做:
这将更改编辑控件的背景色
ss2ws0br5#
您只需要在控件的设备上下文中设置所需的颜色,并在WM_CTLCOLOREDIT消息中传递一个具有相同颜色的HBRUSH。如果要同时更改前景色和背景色,请使用SetTextColor来更改文本颜色。但必须传递背景色HBRUSH。但如果只想更改文本颜色,则必须使用GetStockObject函数传递DC_BRUSH。