Winapi 淡入/淡出按钮(设置透明度)

Winapi 淡入/淡出按钮(设置透明度),winapi,mfc,Winapi,Mfc,在对话框中,我有一个选项按钮。但是我不想让它一直可见,只有当光标在对话框上时,并且有一个很好的淡入/淡出 我尝试了几种方法使CButton对其透明,但没有成功 例如,我尝试过SetLayeredWindowAttributes和UpdateLayeredWindow,但无法让它们工作,可能是因为CButton是一个孩子 如何设置CButton的透明度有什么提示吗 我尝试过SetLayeredWindowAttributes和UpdateLayeredWindow,但我 不能让他们工作,可能是因为

在对话框中,我有一个选项按钮。但是我不想让它一直可见,只有当光标在对话框上时,并且有一个很好的淡入/淡出

我尝试了几种方法使CButton对其透明,但没有成功

例如,我尝试过SetLayeredWindowAttributes和UpdateLayeredWindow,但无法让它们工作,可能是因为CButton是一个孩子

如何设置CButton的透明度有什么提示吗

我尝试过SetLayeredWindowAttributes和UpdateLayeredWindow,但我 不能让他们工作,可能是因为CButton是个孩子

从Windows 8开始支持:

为了使用分层子窗口,应用程序必须声明 清单中的Windows 8-aware本身

为此,请通过项目属性>清单工具>输入和输出>其他清单文件向应用程序添加类似的清单部分:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!-- Windows 8 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
    </application>
  </compatibility>
</assembly>
将此代码添加到覆盖的CDialog::OnInitDialog中,我在Win 10下得到了以下结果:

请注意,按钮看起来像已禁用,但这只是巧合

要使按钮再次完全不透明,请删除WS_EX_分层位:

如果您需要支持比Windows8更旧的操作系统,那么您必须使用更复杂的技术来实现相同的效果。我想到的只是一些想法:

创建所有者绘制或自定义绘制的按钮,以完全控制按钮的外观,并能够伪造透明度。 创建一个最初隐藏的按钮。通过向按钮发送WM_PRINTCLIENT消息,创建按钮的快照,使其看起来像是可见的。以所需的透明度绘制快照以代替实际按钮。当alpha值达到255时显示按钮。这与工作原理类似。 我尝试过SetLayeredWindowAttributes和UpdateLayeredWindow,但我 不能让他们工作,可能是因为CButton是个孩子

从Windows 8开始支持:

为了使用分层子窗口,应用程序必须声明 清单中的Windows 8-aware本身

为此,请通过项目属性>清单工具>输入和输出>其他清单文件向应用程序添加类似的清单部分:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!-- Windows 8 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
    </application>
  </compatibility>
</assembly>
将此代码添加到覆盖的CDialog::OnInitDialog中,我在Win 10下得到了以下结果:

请注意,按钮看起来像已禁用,但这只是巧合

要使按钮再次完全不透明,请删除WS_EX_分层位:

如果您需要支持比Windows8更旧的操作系统,那么您必须使用更复杂的技术来实现相同的效果。我想到的只是一些想法:

创建所有者绘制或自定义绘制的按钮,以完全控制按钮的外观,并能够伪造透明度。 创建一个最初隐藏的按钮。通过向按钮发送WM_PRINTCLIENT消息,创建按钮的快照,使其看起来像是可见的。以所需的透明度绘制快照以代替实际按钮。当alpha值达到255时显示按钮。这与工作原理类似。
我在Windows10上测试了它,所以我想我缺少的是清单。谢谢你指出这一点!我从来不知道C++应用程序的情况。我在Windows 10上测试过,所以我认为我缺少的是清单。谢谢你指出这一点!我从来不知道C++应用程序。
pButton->ModifyStyleEx( WS_EX_LAYERED, 0 );