2013-08-22 9 views
1

Привет, я хочу очистить DrawText(), и я не знаю, как это сделать должным образом. Я мог бы просто SetTextColor цвету моего фона, но это не изящный способ сделать это, я думаю. Я не знаю, может быть, я мог бы что-то сделать с прямоугольником rc, который содержит мой текст. рисую по case WM_PAINT и в нем:Winapi: Правильный способ очистки DrawText()

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

ответ

3

Невозможно «очистить» текст, который вы нарисовали, кроме как рисовать что-то еще сверху. Если ваш фон является сплошным цветом, тогда просто нарисуйте прямоугольник этого цвета (вы можете определить, насколько он должен быть, используя флаг DT_CALCRECT с DrawText). Если ваш фон является изображением, вам нужно разбить соответствующую область изображения.

Обратите внимание, что рисование текста поверх самого себя с использованием цвета фона (как вы подскажете) может не работать из-за ClearType/сглаживания.

Чтобы ответить на ваш второй вопрос, нет - DC, возвращаемый BeginPaint, фактически удаляется по вызову EndPaint, и поэтому вам не нужно (и не должно) удалять его отдельно.

+0

Благодарим вас за информацию. После того, как я установил пользователь 'int flag = 0' или' = 1', он работал отлично :) Я также должен 'InvalidateRect()' после того, как флаг изменил его состояние, потому что предыдущее текстовое поле все еще было на экране. – NightKn8