图形编辑器:绘制和更改形状(Windows GDI)

时间:2010-11-03 09:49:35

标签: winapi gdi+ gdi

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

答案 0 :(得分:1)

这就是在Windows 3.x时代完成的方式,当时你所拥有的只是386SUX。现在,您只需更新内部形状列表并调用InvalidateRect,让WM_PAINT消息处理程序重新呈现所有形状。不需要XOR技巧及其难看的副作用。当它开始闪烁时双缓冲。