2011-05-21 112 views
7

我需要在窗口列表上执行多个操作(最小化其中一些窗口,还原其他窗口),以便一次切换两个或多个窗口集。以编程方式最小化/恢复窗口跳过动画效果

这个问题是您在最小化和恢复窗口时可以看到的那些动画。整个过程看起来很糟糕,所有这些动画进出,上下。
但是,我不能禁用这些动画,因为这是用于其他计算机,我不想更改其他人的设置,而且当您最小化/恢复一个窗口(即手动执行此操作时)时,这些动画实际上非常有用,因为您可以看到正在发生的事情,但是一次只能在几个窗口上以编程方式执行,这并不好。

我很忙,使用SendMessage函数发送WM_SYSCOMMAND消息与参数SC_MINIMIZE/SC_RESTORE。我不知道是否有另一种方式。

因此,问题:
如何在没有动画效果的情况下以编程方式最小化/恢复窗口?

PS:编程语言并不重要。我可以使用任何语言来完成这个任务。

+0

您是否尝试过ShowWindow(SW_MAXIMIZE),ShowWindow(SW_RESTORE)? – 2011-05-21 13:01:15

+0

@Simon,另一位用户建议说,但它的作用与'SW_SHOWMINIZED'的'WM_SYSCOMMAND'消息 – GetFree 2011-05-21 14:06:07

+0

SetWindowPlacement一样,因为showCmd似乎绕过了动画。但我无法找到这方面的参考。 – 2011-05-21 14:24:26

回答

2

隐藏>最小化>显示?

+0

我想到了。不幸的是,这提出了一个不同的问题。当您隐藏窗口时,其任务栏按钮将从任务栏中删除。然后,当您取消隐藏时,其任务栏按钮将作为最右边的按钮放回到任务栏中。这意味着你按照任务栏按钮的顺序留下一个完整的混乱。 – GetFree 2011-05-21 14:13:32

2

您可以暂时禁用动画,然后恢复用户的原始设置。

class WindowsAnimationSuppressor { 
    public: 
    WindowsAnimationSuppressor() : m_suppressed(false) { 
     m_original_settings.cbSize = sizeof(m_original_settings); 
     if (::SystemParametersInfo(SPI_GETANIMATION, 
           sizeof(m_original_settings), 
           &m_original_settings, 0)) { 
     ANIMATIONINFO no_animation = { sizeof(no_animation), 0 }; 
     ::SystemParametersInfo(SPI_SETANIMATION, 
           sizeof(no_animation), &no_animation, 
           SPIF_UPDATEINIFILE | SPIF_SENDCHANGE); 
     m_suppressed = true; 
     } 
    } 

    ~WindowsAnimationSuppressor() { 
     if (m_suppressed) { 
     ::SystemParametersInfo(SPI_SETANIMATION, 
           sizeof(m_original_settings), 
           &m_original_settings, 
           SPIF_UPDATEINIFILE | SPIF_SENDCHANGE); 
     } 
    } 

    private: 
    bool m_suppressed; 
    ANIMATIONINFO m_original_settings; 
}; 

void RearrangeWindows() { 
    WindowsAnimationSuppressor suppressor; 

    // Rearrange the windows here ... 
} 

当构造抑制器时,它会记住用户的原始设置并关闭动画。析构函数恢复原始设置。通过使用c'tor/d'tor,确保在重新排列的代码抛出异常时恢复用户的设置。

这里有一个小窗口的漏洞。理论上,用户可以在操作过程中更改设置,然后您将原始设置猛击回来。这是非常罕见的,并不是那么糟糕。

+0

感谢您的支持。尽管如此,我还是需要做一些修改。我试图提交[编辑](http://stackoverflow.com/review/suggested-edits/7456370),但它被拒绝(WTF ?!)。 – Paul 2015-03-24 20:51:47

+0

@Paul:你的编辑对我来说看起来很不错。我不确定他们为什么被拒绝。我已经提前完成并重做了它们(风格略有不同)。 – 2015-03-24 22:58:20

+0

很酷,但你没有修复析构函数。 – Paul 2015-03-25 17:22:49

相关问题