【问题标题】:How do I force a repaint of only the background so a control doesn't repaint over it again?如何强制仅重绘背景,以便控件不会再次重绘背景?
【发布时间】:2019-11-03 18:51:53
【问题描述】:

这个问题是由对另一个问题的回复产生的:Common Controls on a Transparent Window?

显然,有一种方法只绘制背景而无需再次绘制控件本身。这将解决在透明背景上具有通用控件按钮的问题。

所以我的问题是,如何在公共控件绘制自身后仅绘制公共控件周围的背景?

【问题讨论】:

  • 我在您链接的帖子(包括与其相关的 cmets)中看不到任何内容,也看不到与您在此处所述内容相关的答案。
  • 您的意思是,例如,重绘一个 RoundRect 按钮,然后您只需要重绘按钮周围多余的白色边框。
  • 是的。某人是如何获得要显示的链接描述的?
  • 不知道我的回答对你有没有帮助。如果有帮助,请标记我的回答。这可能对阅读此主题的其他社区成员有所帮助。
  • 它是否可以填充所有区域,比如说它是如此圆形以至于它是圆形的,它会填充整个正方形吗?透明背景怎么样,能不能有一个反向失效路径?

标签: winapi gdi


【解决方案1】:

关于如何重绘可见边框。

RoundRect绘制的圆角矩形为代表

FrameRgn函数使用指定的画笔在指定区域周围绘制边框。

简单代码演示:

HRGN hRegion = ::CreateRoundRectRgn (0, 0, ClientWidth, ClientHeight,12,12);
Canvas->Brush->Style = bsSolid;
Canvas->Brush->Color = RGB(96, 96, 96);
::FrameRgn(Canvas->Handle, hRegion, Canvas->Brush->Handle, 2, 2);
::DeleteObject(hRegion); // Don't leak a GDI object

您需要的链接:Redraw Border

【讨论】:

    猜你喜欢
    • 2020-08-17
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多