windows SetLayeredWindowAttributes和WS_CHILD

bxpogfeg  于 2023-05-23  发布在  Windows
关注(0)|答案(3)|浏览(159)

我怎样才能获得与使用WS_CHILD样式创建的窗口的SetLayeredWindowAttributes相同的效果?有什么变通办法吗?从MSDN:
要创建分层窗口,请在调用CreateWindowEx函数时指定WS_EX_LAYERED扩展窗口样式,或在创建窗口后调用SetWindowLong函数设置WS_EX_LAYERED。在CreateWindowEx调用后,分层窗口将不会变为可见,直到为此窗口调用SetLayeredWindowAttributes或UpdateLayeredWindow函数。请注意,WS_EX_LAYERED不能用于子窗口。

pbgvytdp

pbgvytdp1#

子窗口不能分层-此样式仅对具有WS_POPUP样式的窗口有效。解决这个问题的一个可能的方法(不是很好)是创建一个WS_POPUP样式的窗口,并在移动“父”窗口时同步它的位置。

nbnkbykc

nbnkbykc2#

在设置子对象的透明之前,请执行以下操作:
第一个设置为MDI主窗口的它(SetWindowLong & SetLayeredWindowAttributes),
那么它将直接为孩子工作。

bqf10yzr

bqf10yzr3#

您可以将.manifest文件添加到Visual Studio解决方案中,但这只支持Win8.1和更高版本。
您可以将以下内容保存到WindowLayer.manifest中,并包含在您的项目中,再次构建,CreateWindowEx与WS_EX_LAYERED与WS_CHILD将工作,我测试了这个,它在我的win10计算机上工作。

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application>
        <!--The ID below indicates application support for Windows Developer Preview -->
        <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
    </application>
  </compatibility>
  <dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="*"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
  </dependency>
</assembly>

相关问题