【发布时间】: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 颜色时,shape 在 white 上具有 green 颜色背景和 红色 在 黑色 背景上。这是 R2_NOTXORPEN 混合模式的正常行为。
但我希望形状与笔的颜色相同。我必须拒绝 R2_NOTXORPEN 混合模式,但是如何正确实现移动,改变形状等操作?如果需要,我可以使用 GDI+。
【问题讨论】: