【问题标题】:Graphics editor: drawing and changing shapes (Windows GDI)图形编辑器:绘制和更改形状 (Windows GDI)
【发布时间】:2011-05-04 09:38:36
【问题描述】:

我需要在画布(由标准“静态控制”表示)上绘制、移动、更改形状(矩形、圆形等)。所有绘图操作均由标准 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
}

在这种情况下,形状正确移动和变化。但最大的问题是形状颜色不好。例如,当 pen 具有 green 颜色时,shapewhite 上具有 green 颜色背景和 红色黑色 背景上。这是 R2_NOTXORPEN 混合模式的正常行为。

但我希望形状与笔的颜色相同。我必须拒绝 R2_NOTXORPEN 混合模式,但是如何正确实现移动,改变形状等操作?如果需要,我可以使用 GDI+。

【问题讨论】:

    标签: winapi gdi+ gdi


    【解决方案1】:

    这就是在 Windows 3.x 时代的做法,那时您只有 386SUX。现在您只需更新内部形状列表并调用 InvalidateRect 让 WM_PAINT 消息处理程序重新渲染所有形状。不需要 XOR 技巧及其丑陋的副作用。开始闪烁时双缓冲。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-14
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多