如何通过使用GDI对其颜色进行异或来在填充矩形上绘制文本?

时间:2017-07-07 09:57:25

标签: c++ windows winapi gdi

我不确定我是否用言语说出来。最好的方法是用图像显示它。我正在尝试填充矩形,同时反转其中的文本颜色。就像edit控件一样:

enter image description here

所以这是一个绘图代码(从WM_PAINT调用):

//Erase background
::FillRect(hDC, &rcClient, ::GetSysColorBrush(COLOR_WINDOW));

//Draw text
::DrawText(hDC, text, text.size(), &rc, 
    DT_LEFT | DT_TOP | DT_EDITCONTROL | DT_NOPREFIX | DT_SINGLELINE);

//Draw highlighted rect & invert text
HGDIOBJ hOldBrush = ::SelectObject(hDC, ::GetSysColorBrush(COLOR_HIGHLIGHT));
::PatBlt(hDC, rcDrawFrame.left, rcDrawFrame.top, rcDrawFrame.Width(), rcDrawFrame.Height(), DSTINVERT);
::SelectObject(hDC, hOldBrush);

但由于某种原因,背景矩形显示为黑色,我知道COLOR_HIGHLIGHT在此系统上是蓝色的:

enter image description here

那我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

您可能想要考虑不同的策略; drawing the text twice with inverted clipped region