Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 更改编辑控件中文本的背景_C++_Api_Winapi - Fatal编程技术网

C++ 更改编辑控件中文本的背景

C++ 更改编辑控件中文本的背景,c++,api,winapi,C++,Api,Winapi,您可以更改编辑控件区域中文本的背景以保持静态吗?WM\u CTLCOLOREDIT允许您设置文本和背景颜色(+画笔),如果您想要更多的控件,您必须在编辑控件的父控件中对自己进行子类化和绘制,处理消息,此消息的wParam是编辑控件将要使用的HDC, 对于大多数CTLCOLOR消息,如果将文本和背景颜色设置到此DC中,控件将使用您设置的颜色 您还可以返回一个HBRUSH,控件将使用它进行任何画笔绘制,但许多控件不经常使用画笔,因此对某些控件的效果有限 彩色消息。您最好返回DC笔刷,并将DC笔刷颜色

您可以更改编辑控件区域中文本的背景以保持静态吗?

WM\u CTLCOLOREDIT允许您设置文本和背景颜色(+画笔),如果您想要更多的控件,您必须在编辑控件的父控件中对自己进行子类化和绘制,处理消息,此消息的wParam是编辑控件将要使用的HDC, 对于大多数CTLCOLOR消息,如果将文本和背景颜色设置到此DC中,控件将使用您设置的颜色

您还可以返回一个HBRUSH,控件将使用它进行任何画笔绘制,但许多控件不经常使用画笔,因此对某些控件的效果有限 彩色消息。您最好返回DC笔刷,并将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。