grenders22 писал(а):
Да, я сделал ввод текста, но как же его удаление.... В общем как организовывать именно локальное обновление заднего буфера я не придумал.
Что такое сигналы и слоты в QT знаете? Или что такое события и их обработчики в Builder?
По события локально обновляете вычисляете какое прямоугольник обновился далее проверяете все окна на пересечения с прямоугольником. Отсылаете им сообщение с событием перерисовка (Painting)
Окна обрабатывают событие и в обработчике OnPaint рисуют своё содержимое.
При рисование используются функции с клиппингом те. с обрезкой по краям окна. Это такая обертка которая математически вычисляет пересечения к примеру линии и окна тем самым усекает эту линию и отправляет её на рисование в алгоритма брезенхема, для окружностей так же используется итератор обходится граница окружности вычисляется пролеты от лева края до правого затем математически усекаются до видимой части и Далее пролёты выводятся.
Для мыши есть несколько путей. К примеру VGA/EGA имеют аппаратное ускорение мыши. Можно как вы писали по события перемещения мыши вызывается сигнал OnPaint в котором вы копируете из заднего буфера на передний прямоугольник в старые координаты.
А после на новом месте рисуете новую мышь.
Если заднего буфера нет, то можно ввести слой абстракции. Вызов функций черчения(gdiLine,gdiCircle,gdiSplyne,gdiPolyLine,gdiBezier,gdiPolyBezier, gdiBitblit)
должен гасить мышь затем вызываются уже функции из низшего уровня абстракции gmLine, gdiCircle,gdiSplyne и тд они будут чертить на переднем буфере, а затем с нова включать мышь.
На OnShow вы копируете из первичного буфера во временный буфер-мыши картинку размером с указатель мыши. Тем самым сохраняете исходное изображение.Потом выводите свой значок мыши.
А по OnHide восстанавливаете исходный участок изображения из буфера-мыши.