【问题标题】:How to place a windowless control on top of a windows control?如何将无窗口控件放置在 Windows 控件之上?
【发布时间】:2012-06-23 06:01:24
【问题描述】:

比如说,我有一个 Image 控件(它似乎是一个无窗口控件),我想确保它位于 TextBox 之上。无论我做什么,图像控件都不会出现在文本框的顶部。

有办法吗?

附:我知道我可以使用 PictureBox,但它不支持透明度,因此我必须拥有 Image 控件。

【问题讨论】:

    标签: vb6 windowless


    【解决方案1】:

    无法将图像控件放置在普通文本框上,因为它们被绘制到表单本身上,因此将始终位于任何其他窗口组件下方。

    如果您有 VB6 安装媒体,则有绘制(无窗口)版本的控件,包括一个 TextBox,您可以使用它(可能)执行您想要的操作; http://support.microsoft.com/kb/184687

    某种类型的自定义用户控件,如果可能更好的话.. 你到底想用什么来覆盖文本框?

    【讨论】:

      【解决方案2】:

      图像控件被认为是图形控件,就像形状一样,所以它总是不如文本控件。如果你真的想要一个透明的图像,你可以使用 Microsoft 2.0 Form 代替(只有你有它)。图像可以在文本框的顶部,您可以通过将 Backstyle 设置为透明(0)使其透明。

      【讨论】:

      • 文档没有提及图形控件和/或“劣质”控件。它确实说无窗口控件是在容器的 DC 中绘制的,因此不可能出现在任何标准子控件之上。此外,您不能在 MS Office 之外合法使用 Forms 2.0 库,您当然不能将它与您的应用程序一起提供——即 MS Office 必须在 客户端 机器上单独获得许可才能在您的 VB6 应用程序中使用 Forms 2.0 .
      • 话虽如此,我过去使用它没有问题,今天它仍然可以在该软件中使用。不过,我总体上同意其他评论者的观点,即如果可能,最好避免,
      【解决方案3】:

      与我的其他答案完全不同的方法(因此是单独的答案),但您可以将 Form 上的 AutRedraw 和 ClipControls 设置为 false,它将允许 Image 控件与窗口控件在同一层上呈现。在某些情况下,您可以进行一些 flakey 重绘,但您可以尝试一下快速解决方案。

      http://msdn.microsoft.com/en-us/library/aa733621(v=vs.60)

      【讨论】:

        【解决方案4】:

        我创建了一个透明的覆盖控件,以便在 VB6 应用程序之上添加一种注释层。我会尝试从记忆中描述它,如果这不能提供足够的信息,那么您可以回帖,我会尝试挖掘代码。

        首先,向您的应用程序添加一个新的 USerControl。给它起一个像 ImageEx、PictureEx 或 TransparntImage 这样的名称。您将需要使用几个属性。确保控件是窗口化的,因此它可以位于其他窗口化控件之上。找到 MaskColor 属性并将其设置为青色(或您选择用于指示透明区域的任何颜色。可能有一个附加属性启用掩蔽行为,只需浏览属性即可。将控件背景颜色设置为 MaskColor 的背景颜色。此时您有一个不可见的控件。在我的控件中,我在表面上绘制了注释,但您可以使用 PaintPicture 或者甚至设置图像属性以实现非常简单的方法。

        当然,为了使它成为一个可重复使用的控件,您需要在自己的属性中编写代码,以允许设置 MaskColor 和图像等,以便您可以将其中一个拖放到您想要的任何表单上。


        一些链接:

        MaskColor Property

        MackPicture Property

        【讨论】:

          【解决方案5】:

          1) 删除所有文本框、标签和...(但在表单中记住它们的名称和位置)

          2)转到(项目>组件)并标记(Microsoft Forms 2.0 Object Library)然后单击确定

          3) 现在您可以在工具箱的默认控件下看到新控件...

          4) 使用其文本框和标签控件而不是默认控件

          5) 右键单击​​您的图像控件,然后单击 (Bring To Front)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-19
            相关资源
            最近更新 更多