Winapi:清除DrawText()的正确方法

时间:2013-08-22 07:15:59

标签: winapi text drawtext hdc

您好我想清除DrawText(),但我不知道如何正确地做到这一点。我可以简单SetTextColor到我背景的颜色,但这并不是我想的优雅方式。我不知道也许我可以用一个包含我的文本的矩形rc做一些事情。 我按case WM_PAINT绘制并在其中绘制:

hdc=BeginPaint(hwnd, &paint);
.... //some other code here
DrawText(hdc, TEXT("some text"), -1, &rc, DT_SINGLELINE);
....//some other code here
EndPaint(hwnd, &paint);

还有一件事。我DeleteDC(hdc);ReleaseDC(hdc);WM_PAINT没有问题,或者我应该在EndPaint(hwnd, &paint);之后或之前拥有它们?

1 个答案:

答案 0 :(得分:3)

除了在顶部绘制其他内容之外,没有办法“清除”您绘制的文本。如果你的背景是纯色,那么只需绘制一个这种颜色的矩形(你可以通过DT_CALCRECT标志DrawText来计算它需要的大小。如果您的背景是图像,则需要对图像的相应区域进行blit。

请注意,使用背景颜色(如您所示)在自身顶部绘制文本可能因ClearType / anti-aliasing而无效。

要回答您的第二个问题,请注意:BeginPaint返回的DC已被EndPaint调用有效删除,因此您无需(也不得)单独删除它。