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

Winapi:清除DrawText()的正确方法,winapi,text,drawtext,gdi,Winapi,Text,Drawtext,Gdi,您好,我想清除DrawText(),但我不知道如何正确操作。我可以简单地将xtcolor设置为我背景的颜色,但我认为这不是一种优雅的方式。我不知道也许我可以用一个矩形rc来保存我的文本。 我通过case WM_PAINT绘制,并在其中: hdc=BeginPaint(hwnd, &paint); .... //some other code here DrawText(hdc, TEXT("some text"), -1, &rc, DT_SINGLELINE); ....//s

您好,我想清除
DrawText()
,但我不知道如何正确操作。我可以简单地
将xtcolor
设置为我背景的颜色,但我认为这不是一种优雅的方式。我不知道也许我可以用一个矩形
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)
释放DC(hdc)WM_PAINT
中的code>可以吗,或者我应该在
EndPaint(hwnd,&PAINT)之后或之前使用它们

除了在顶部绘制其他内容外,无法“清除”您绘制的文本。如果您的背景是纯色,则只需绘制该颜色的矩形(您可以使用
DT\u CALCRECT
标志和
DrawText
,计算出它需要多大)。如果你的背景是一幅图像,那么你需要在图像的适当区域进行blit

请注意,由于ClearType/抗锯齿,使用背景色(如您所建议)在文本顶部绘制文本可能不起作用


回答第二个问题,否-调用
EndPaint
可以有效地删除
BeginPaint
返回的DC,因此您无需(也不得)单独删除它。

谢谢您提供的信息。在我设置了一个用户
int flag=0
=1
之后,它工作得很好:)我还必须
invalidate()
在标记后更改其状态,因为屏幕上仍然有上一个文本字段。