mfc - 创建自定义透明控件

标签 mfc controls transparency alphablending z-order

我正在尝试创建一个自定义控件,该控件显示带有每像素 alphablend 的位图(正如你们中的一些人已经知道的其他问题)。

现在我在资源编辑器中使用自定义控件,并将其附加到从 CWnd 派生的类。当我注册我的自定义类时,我将 WNDCLASS 结构的 hbrBackground 设置为 NULL_BRUSH 以实现控件的透明度。

在控件的 OnPaint 中,我使用 AlphaBlend 绘制每像素 alpha 混合位图。

这很有效,但我有两个问题:

  • 当鼠标悬停在控件上时,我想更改显示的位图。由于控件是透明的,一个位图没有被另一个位图重叠的区域不会被删除。更改图像时如何删除背景?
  • 第二个问题与两个重叠的控件有关。我的控件被绘制在具有渐变的其他控件上(实际上是在其他控件内)。问题是,如果我将控件放在 z 顺序之前,其他控件会与我的控件重叠,而不会显示我的控件。如果我将另一个控件放在 z 顺序之前,我将无法在我的控件中获取鼠标消息。

  • 也许我做错了什么,或者我在尝试实现我的控制方面有错误。任何形式的帮助将不胜感激。

    谢谢,

    哈维尔

    最佳答案

    我会捕获机会。 :-)

    这应该为您提供完成我认为您想要的一切所需的一切。

    General Solution for Transparent Controls

    就 Z-order 问题而言,z-order 不影响消息优先级。您需要发布一些代码,以便我们确定那里发生了什么。

    关于mfc - 创建自定义透明控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/328135/

    相关文章:

    c++ - MFC 一个父对话框,多个子对话框

    c++ - 在 MFC 应用程序中创建和使用 Dll

    C++ 函数指针传递在 vs2008 中编译,但在 vs2017 中不编译

    asp.net - 用于网站的数据驱动开源温度计

    css - 不同页面上的相同元素显示不同的 CSS

    c# - 在 C# 中显示带有 alpha channel 的 PNG

    PHP - 从 blob 文件创建图像并与另一个文件组合,同时保持透明度

    c++ - 拖放文本 - 我错过了什么?

    java - 如何在 Windows (7) 上更改 Java 运行时版本?

    c# - CheckedListBox 控件中的 WordWrap