当前位置: 首页 > 知识库问答 >
问题:

在Form_Load处使用AnimateWindow()

杜楚
2023-03-14

我有一个无边框的窗体,我使用AnimateWindow()方法来创建打开,关闭等窗体的动画。 我使用以下代码:

[Flags]
enum AnimateWindowFlags
{
    AW_HOR_POSITIVE = 0x0000000
    AW_HOR_NEGATIVE = 0x00000002,
    AW_VER_POSITIVE = 0x00000004,
    AW_VER_NEGATIVE = 0x00000008,
    AW_CENTER = 0x00000010,
    AW_HIDE = 0x00010000,
    AW_ACTIVATE = 0x00020000,
    AW_SLIDE = 0x00040000,
    AW_BLEND = 0x00080000
}

[DllImport("user32.dll")]
static  extern bool AnimateWindow(IntPtr hWnd, int time, AnimateWindowFlags flags);

当涉及到关闭表单时,这段代码似乎很有用:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    AnimateWindow(this.Handle, 100, AnimateWindowFlags.AW_BLEND | AnimateWindowFlags.AW_HIDE);
}

但是,当使用以下代码打开表单时:

private void Form1_Load(object sender, EventArgs e)
{
    AnimateWindow(this.Handle, 100, AnimateWindowFlags.AW_BLEND);
}

好像什么都没发生。 在进行了一些猜测和测试之后,我认为使用AnimateWindow()方法使表单淡出是可行的,但是使用它使表单淡出则没有任何作用(不管time参数如何)。

有什么想法吗?

共有1个答案

陈飞
2023-03-14

这是很难正确地做到的,有大量的代码涉及,是非常棘手的推理通过。 在WinForms中,Visible属性是一个非常重要的问题,它由Application类为启动窗体和Show()方法设置,当您创建自己的启动窗体时。 在典型的。NET方式中,本机窗口的创建是懒惰的,当球开始滚动时,会发生很多很多的事情。

必须在调用Show()方法和Winforms有机会pinvoke ShowWindow()之间注入AnimateWindow()调用。 正是后一个调用破坏了动画效果当您在OnLoad()中尝试它时,事件激发得太晚了。

您可以尝试以下代码,将其粘贴到窗体类中:

    protected override void SetVisibleCore(bool value) {
        if (!this.IsHandleCreated) {
            NativeMethods.AnimateWindow(this.Handle, 100, AnimateWindowFlags.AW_BLEND);
        }
        base.SetVisibleCore(value);
    }

    protected override void OnShown(EventArgs e) {
        this.BringToFront();
        base.OnShown(e);
    }

但我不能保证它在所有可能的情况下都能工作,也没有对它进行过广泛的测试。 不得不调用BringToFront()已经是一个令人不快的黑客了。 不要在MDI子表单上尝试,不太可能有好的结果。

 类似资料:
  • pm.detachcopy正在工作? 我正在制作一个spring+ObjectDB(JDO)程序。 PersistenceManager#DetachCopy返回一个瞬态对象,尽管@PersistenceCapable:Detachable为true。 下面是一个示例代码。 我有一个简单的测试模型(POJO) 可分离的设置为“true”。 而dao是 我认为我在(2)处有一种超然的状态。但只是暂时

  • 我的处理器中有一个简单的注释,如下所示: 这适用于java文件,但一旦我将文件转换为kotlin,注释的导入就不再有效。为什么? 我需要改变什么才能让他的注释也在Kotlin中工作?从文档中,我可以看到kotlin与java注释100%兼容,所以我有点困惑这里有什么问题...如果处理器不工作,需要调整以与kotlin一起工作,我会理解,但我不知道为什么导入本身不工作... 我说的图书馆在这里:ht

  • 其中是我的服务实现类。 在部署机器上,我将kubeconfig文件放在~/.kube/config上,并且命令行很好。 我不知道如何处理这个问题。知道我该如何找出异常的原因吗? 提前谢谢!

  • 我如何在我的java项目中包含PDE文件?有可能吗?

  • 我在chrome中遇到了一个错误:“您正在使用一个不受支持的命令行标志-忽略-证书-错误。稳定性和安全性将受到影响。”为我下面的硒代码。 我在下面的链接中搜索了相同的错误解决方案。 http://www.abodeqa.com/tag/how-to-remove-you-are-using-an-unsupport-command-line-flag-ignore-certifice-errors

  • 了解您可以如何在 Dreamweaver 中处理和编译 CSS 预处理器文件。 CSS 预处理器可将用预处理语言编写的代码编译到最熟悉的 CSS 中。预处理语言可将 CSS 提升到更接近编程语言的级别。 具体来说,预处理器允许您使用变量、组合单元、函数以及许多其他 在 CSS 中无法使用的方法。通过 CSS 预处理器,您只需定义所有内容一次,然后即可反复重用它们,从而产生可维护、主题化、可扩展的

  • 这是如何使用公共类frome的一个后续步骤。其他处理选项卡中的java文件?;使用来自的Usage类中的示例。java文件-有完整的文档吗?-处理2。x和3。x论坛,我有这个: /tmp/Sketch/Foo.java 这个例子运行得很好,但是如果我取消注释import peasy。组织 行,则编译失败: 当然,我确实在下安装了PeasyCam,如果我导入peasy.*它工作得很好 来自草图。 我

  • 我扩展了moxy代码以使用XML模式定义,而不是JAXB注释bean。xjc编译的XML模式生成与原始示例相同的XML和JSON编码。 我按照jersey的说明,使用ObjectFactory在CustomerResource中生成JAXBElement客户对象表示。JAVA我还按照描述修改了客户机。我还将Jersey 2.2下的JAXB与MOXy结合在一起,解决了PUT问题中描述的JSON处理问