当前位置:  开发笔记 > 编程语言 > 正文

如何在没有闪烁的情况下恢复最小化窗口

如何解决《如何在没有闪烁的情况下恢复最小化窗口》经验,为你挑选了0个好方法。

我为Vista制作了一个暴露克隆,有时需要恢复最小化的窗口.我已经设法使用SetWindowPlacement函数执行此操作.问题是,在窗口很好地滑入屏幕后,这也重新粉刷了看起来像垃圾的窗口.

这是我用来将窗口置于顶部并给予焦点的代码:

    private static void ActivateWindow(IntPtr windowToShow)
    {
        RectAPI r = new RectAPI();
        Win32.GetWindowRect(windowToShow, ref r);

        if (r.top == -32000) //r.top is -32000 if the window is in minimized state
        {
            WINDOWPLACEMENT wp = new WINDOWPLACEMENT();
            Win32.GetWindowPlacement(windowToShow, ref wp);

            if (wp.flags == WindowPlacementFlags.WPF_RESTORETOMAXIMIZED)
                wp.showCmd = cmdShow.SW_SHOWMAXIMIZED;
            else
                wp.showCmd = cmdShow.SW_RESTORE;

            Win32.SetWindowPlacement(windowToShow, ref wp);
        }

        Win32.SetForegroundWindow(windowToShow);
    }

如果我在已经恢复的窗口上使用它,它将只调用SetForegroundWindow,窗口将到达z顺序的顶部并获得焦点而没有任何闪烁.

但是如果我在最小化窗口上调用它,我还必须使用SetWindowPlacement将窗口恢复到恢复状态.这是导致窗口重绘和闪烁的原因:/

必须有一种方法可以在没有闪烁的情况下恢复最小化的窗口,因为内置的窗口管理器可以做到这一点.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有