[英]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.