我需要在画布上绘制,移动,更改形状(矩形,圆形等)(由标准“静态控制”表示)。所有绘图操作都通过标准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 +。
答案 0 :(得分:1)
这就是在Windows 3.x时代完成的方式,当时你所拥有的只是386SUX。现在,您只需更新内部形状列表并调用InvalidateRect,让WM_PAINT消息处理程序重新呈现所有形状。不需要XOR技巧及其难看的副作用。当它开始闪烁时双缓冲。