Изменение фона текста в редактировании - PullRequest
3 голосов
/ 14 февраля 2010

Можете ли вы изменить фон текста в области управления редактированием, который бы оставался статичным?

Ответы [ 4 ]

11 голосов
/ 14 февраля 2010

В родительском элементе элемента управления редактирования обработайте сообщение WM_CTLCOLORSTATIC , wParam этого сообщения - это HDC, который собирается нарисовать элементом управления Edit, для большинства сообщений CTLCOLOR, если вы устанавливаете цвета текста и фона в этот DC, элемент управления будет использовать заданные вами цвета.

Вы также можете вернуть HBRUSH, и контроллер будет использовать его для любой кисти, которую он будет делать, но многие элементы управления не используют кисти сильно, так что для некоторых эффект будет ограниченным CTLCOLOR сообщения. Здесь лучше всего вернуть кисть DC и установить цвет кисти DC в соответствии с BkColor 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;
6 голосов
/ 28 ноября 2012

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.
}
...

Если у вас более 1 элемента управления для редактирования, вы можете использовать идентификатор элемента и lParam, чтобы проверить, какой из них нужно изменить.

2 голосов
/ 14 февраля 2010

WM_CTLCOLOREDIT позволяет вам установить цвет текста и фона (+ кисть), если вы хотите больше контроля, чем это, вы должны создать подкласс и нарисовать себя

0 голосов
/ 21 июля 2017

вы могли бы сделать что-то вроде этого:

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);

Это должно изменить цвет фона элемента управления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...