В настоящее время я рисую текст из текстового поля в моем окне. Я успешно получаю текст, который нужно рисовать, и он рисует текст. Все нормально.C++ redraw with DrawText
Вот проблема: когда я пишу что-то еще в своем поле ввода и снова рисую текст (с помощью нажатия кнопки), новый текст рисуется прямо поверх предыдущего текста, что и следовало ожидать.
Я новичок во всем этом, и я не могу найти способ очистить предыдущий текст до рисования нового текста.
Вот мой код:
void DrawMyText(HWND hwnd) {
int iTextLength = GetWindowTextLength(hDrawInput) + 1;
char cDrawText[1000] = "";
HDC wdc = GetWindowDC(hwnd);
RECT canvas;
canvas.left = 168;
canvas.top = 108;
canvas.right = 500;
canvas.bottom = 500;
GetWindowText(hDrawInput, cDrawText, iTextLength);
SetTextColor(wdc, 0x00FF0066);
SetBkMode(wdc,TRANSPARENT);
DrawText(wdc, cDrawText, -1, &canvas, DT_LEFT);
DeleteDC(wdc);
}
Любые советы о том, как это сделать? Я с удовольствием предоставу любую дополнительную информацию, если потребуется. Заранее спасибо!
спасибо. Я бы очень хотел использовать что-нибудь другое, но я абсолютно должен использовать DrawText, это университетское задание. Я должен рисовать с цветом фона, но я хотел бы оставить его в качестве последнего возможного варианта. Я попробовал 'InvalidateRect (hwnd, & canvas, TRUE);' прямо перед тем, как я рисую снова, но, похоже, ничего не делает. Я делаю это неправильно? –
Хм. Вместо InvalidateRect() попробуйте FillRect (wdc, & canvas, brush), где кисть - это простая кисть, которую вы создали, чтобы очистить фон (возможно, только белый?). InvalidateRect() должен принудительно перерисовать, но в зависимости от того, что вы делаете, это сложно. FillRect может дать вам лучшие результаты. Очевидно, не забудьте сделать FillRect перед вызовом DrawText. – MikeD
Мне нравится спрей может аналогию. 'InvalidateRect', как правило, правильная вещь, но для этого требуется обработать полученное сообщение с краской и нарисовать текст после того, как фон был перерисован. –