簡體   English   中英

更改編輯控件中文本的背景

[英]Changing background of text in edit control

你能改變編輯控件區域的文本背景嗎? static?

在編輯控件的父級中,處理WM_CTLCOLORSTATIC消息,此消息的wParam是Edit控件即將繪制的HDC,對於大多數CTLCOLOR消息,如果將文本和背景顏色設置為此DC,控件將使用你設置的顏色。

你也可以返回一個HBRUSH,並且控制器會將它用於任何畫筆繪畫,但許多控件不會使用很多畫筆,因此對某些CTLCOLOR消息的影響有限。 這里最好的選擇是返回DC畫筆,並設置DC畫筆顏色以匹配DC的BkColor。

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

如果您有多個編輯控件,則可以使用item id和lParam來檢查哪一個需要更改。

WM_CTLCOLOREDIT允許你設置文本和背景顏色(+畫筆),如果你想要更多的控制,你必須子類化並自己畫畫

你可以這樣做:

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

這應該會更改編輯控件的背景顏色

您只需要在控件的設備上下文中設置所需的顏色,並在 WM_CTLCOLOREDIT 消息中傳遞具有相同顏色的 HBRUSH。 如果要更改前景和背景 colors,請使用 SetTextColor t0 更改文本顏色。 但是你必須通過背景色HBRUSH。 但是,如果您只想更改文本顏色,則必須使用 GetStockObject function 傳遞 DC_BRUSH。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM