C++ 更改编辑控件中文本的背景
您可以更改编辑控件区域中文本的背景以保持静态吗?WM\u CTLCOLOREDIT允许您设置文本和背景颜色(+画笔),如果您想要更多的控件,您必须在编辑控件的父控件中对自己进行子类化和绘制,处理消息,此消息的wParam是编辑控件将要使用的HDC, 对于大多数CTLCOLOR消息,如果将文本和背景颜色设置到此DC中,控件将使用您设置的颜色 您还可以返回一个HBRUSH,控件将使用它进行任何画笔绘制,但许多控件不经常使用画笔,因此对某些控件的效果有限 彩色消息。您最好返回DC笔刷,并将DC笔刷颜色设置为与DC的颜色匹配C++ 更改编辑控件中文本的背景,c++,api,winapi,C++,Api,Winapi,您可以更改编辑控件区域中文本的背景以保持静态吗?WM\u CTLCOLOREDIT允许您设置文本和背景颜色(+画笔),如果您想要更多的控件,您必须在编辑控件的父控件中对自己进行子类化和绘制,处理消息,此消息的wParam是编辑控件将要使用的HDC, 对于大多数CTLCOLOR消息,如果将文本和背景颜色设置到此DC中,控件将使用您设置的颜色 您还可以返回一个HBRUSH,控件将使用它进行任何画笔绘制,但许多控件不经常使用画笔,因此对某些控件的效果有限 彩色消息。您最好返回DC笔刷,并将DC笔刷颜色
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;
WM_CTLCOLORSTATIC用于静态文本控制 简单地说,您可以在winproc中执行此操作:
...
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.
}
...
如果您有多个编辑控件,则可以使用项目id和LPRAM检查需要更改的控件。您可以执行以下操作:
CBrush bkBrush;
RECT ctrlRect;
COLORREF crBk = RGB(255,0,0); // Red color
bkBrush.CreateSolidBrush(crBk);
CWnd* pDlg = CWnd::GetDlgItem(IDC_EDIT);
pDlg->GetClientRect(&ctrlRect);
pDlg->GetWindowDC()->FillRect(&ctrlRec, &bkBrush);
pDlg->GetWindowDC()->SetBkColor(crBk);
这将更改编辑控件的背景色实际上,即使它是可接受的答案,也不会像OP要求的那样对编辑控件起作用。要使其工作,需要将WM_CTLCOLORSTATIC替换为WM_CTLCOLOREDIT。如果编辑控件被禁用或只读,请使用WM_CTLCOLORSTATIC。对于常规编辑控件,请使用WM_CTLCOLOREDIT。