代码之家  ›  专栏  ›  技术社区  ›  Fox

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

  •  0
  • Fox  · 技术社区  · 15 年前

    我需要在画布(用标准的“静态控制”表示)上绘制、移动、更改形状(矩形、圆形)。所有绘图操作均通过标准的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 回复  |  直到 15 年前
        1
  •  1
  •   Hans Passant    15 年前

    这是在Windows3.x的时候做的,当时你只有386sux。现在只需更新内部形状列表并调用invalidrect,让wm_绘制消息处理程序重新呈现所有形状。不需要XOR技巧及其短暂的副作用。双缓冲器,当它开始闪烁时。