【问题标题】:win32 controls (QWinHost) not painted on layered (ie. semi-transparent) widget (WS_EX_LAYERED)win32 控件(QWinHost)未绘制在分层(即半透明)小部件(WS_EX_LAYERED)上
【发布时间】:2012-08-06 12:42:17
【问题描述】:

我使用 QWinHost 移植了一个 win32 控件,并将其放在分层(半透明)小部件上。当我设置 WS_EX_LAYERED 标志时,win32 移植控件没有发生绘制。

SetWindowLong(winId(),
           GWL_EXSTYLE,
           GetWindowLong(winId(), GWL_EXSTYLE) | *WS_EX_LAYERED*);

【问题讨论】:

  • 欢迎来到 Stack Overflow,不幸的是,您的问题不适合网站的格式:它没有说明您到目前为止尝试了什么,您必须完成哪些研究等。您应该编辑您的问题,使其针对您遇到的特定问题。

标签: qt winapi qpainter ws-ex-layered


【解决方案1】:

您需要告诉 Windows 如何绘制分层窗口。 MSDN 表示有两种方式;你几乎肯定想要SetLayeredWindowAttributes,因为你不想改变控件的绘制代码。

所以之后

SetWindowLong(winId(),
           GWL_EXSTYLE,
           GetWindowLong(winId(), GWL_EXSTYLE) | WS_EX_LAYERED);

添加

SetLayeredWindowAttributes(winId(), RGB(0,0,0), bAlpha, LWA_ALPHA);

(当然,根据您的需要进行了调整)。

注意分层窗口必须是Windows 7以下的顶层窗口;只有 Windows 8 及更高版本支持分层子窗口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2011-09-11
    • 2011-08-31
    • 1970-01-01
    • 2011-04-16
    • 2011-01-10
    相关资源
    最近更新 更多