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

用Delphi绘制和清理桌面画布

  •  1
  • jonjbar  · 技术社区  · 16 年前

    4 回复  |  直到 16 年前
        1
  •  5
  •   mghie    16 年前

    至少在桌面构图激活的情况下,直接在桌面上绘制并进行XOR绘制是一个非常糟糕的主意(请参阅中的“在屏幕上绘制和阅读——Baaaad!” this blog post

    实现它的一种可能方法是桌面大小的透明覆盖窗口,并在其上绘制橡皮筋选择器。如果大小更改足够,则使整个窗口无效,无需擦除旧的选择行。如果去除覆盖层,线条也会消失。桌面构图将确保不会出现闪烁。但是,在选择区域时切换应用程序会有问题,您需要抓住这一点并立即取消选择。

    编辑:

    • 一个表格 FormStyle fsStayOnTop AlphaBlend 着手 True
    • 与覆盖 CreateParams() WS_EX_TRANSPARENT

        2
  •  0
  •   Vivian Mills    16 年前

    我过去做过这样的事情,但我从来没有想出一个可接受的解决方案。

    procedure InvalidateDesktop;
    begin
      RedrawWindow(GetDesktopWindow, 0, 0, RDW_INVALIDATE);
    
      //if that doesn't work then try this:
      //Sendmessage(GetDesktopWindow, wm_setredraw, 1, 0);
    end;
    

    这可能会达到你想要的效果,我还没有测试它,因为我刚刚把它作为例子。

        3
  •  0
  •   Despatcher    16 年前

        4
  •  -2
  •   Alan Clark    16 年前

        FBitmap.Canvas.Brush.Color := clWhite;
        FBitmap.Canvas.FillRect(FBitmap.Canvas.ClipRect);
    
    推荐文章