Графический редактор: рисование и изменение форм (Windows GDI) - PullRequest
0 голосов
/ 03 ноября 2010

Мне нужно рисовать, перемещать, изменять фигуры (прямоугольники, круги и т. Д.) На холсте (представлен стандартным «Статическим контролем»).Все операции рисования реализуются стандартными функциями GDI.

Я понял это так:

(пример для движущаяся фигура , другие операции используют тот же принцип)

...

// Before any actions set foreground mix mode:

SetROP2(hdc_, R2_NOTXORPEN); 

...

void OnMouseDown(...)
{
  SelectShapeUnderCursor();
}

void OnMouseMove(...)
{
  ... 
  DrawShape(old_points); // Eraise shape at old position (drawing with the same pen's color, see description of R2_NOTXORPEN mode)
  DrawShape(new_points); // Draw shape at new position
  ...
}

void OnMouseUp(...)
{
  DrawShape(new_points); // Final draw shape
}

В этом случае формы правильно движутся и меняются.Но большая проблема - плохие цвета фигур.Например, когда ручка имеет зеленый цвет, форма имеет зеленый цвет на белый фон и красный на черный фон.Это нормальное поведение для режима микширования R2_NOTXORPEN.

Но я хочу, чтобы фигуры были того же цвета, что и перо.Я должен отказаться от режима микширования R2_NOTXORPEN, но как правильно реализовать такие операции, как перемещение, изменение формы?Я могу использовать GDI +, если необходимо.

1 Ответ

1 голос
/ 03 ноября 2010

Это было сделано в те времена, когда в Windows 3.x было только 386SUX. Теперь вы просто обновляете внутренний список фигур и вызываете InvalidateRect, чтобы обработчик сообщений WM_PAINT повторно отображал все фигуры. Нет необходимости в трюках с XOR и его неприятных побочных эффектах. Двойной буфер, когда он начинает мерцать.

...