【发布时间】:2017-02-27 21:11:17
【问题描述】:
我有一个窗口,大部分时间都是隐藏的。用户有时通过全局热键显示它,他希望它很快变得可见。但是窗口有很多控件,每个隐藏->可见的转换都会调用完整的窗口重绘。在慢速 CPU 上,这是非常明显的。我想让这个窗口即使在隐藏状态下也总是被绘制。那么我认为展示它需要很短的时间。
【问题讨论】:
-
我希望我的窗口看起来非常快,就像它在后台一样,我只需调用 SetForegroundWindow。
-
还有一件重要的事情是我需要在窗口隐藏上隐藏任务栏图标并在窗口显示上显示它
-
我做了一些复杂棘手的解决方案。我很快就会在这里描述它。
-
1.处理系统事件“活动窗口更改”以始终知道其句柄。让它成为变量lastActiveWindow。 2. 在 FormClosing 事件
if (lastActiveWindow != null) lastActSet = SetForegroundWindow(lastActiveWindow); if (!lastActSet) SetActiveWindow(IntPtr.Zero); this.Top = -this.Height; e.Cancel = true;
code -
我真的试图信守承诺并在之前的评论中描述解决方案。但是难以克服的标记、5 分钟的版本评论时间和最大长度太难以克服。所以非常简短的解决方案是将窗口移到屏幕外而不是关闭并在激活时将其移回。调试起来很困难,但它工作得非常快。负面影响是窗口需要始终显示在任务栏中,否则它将随着任务栏图标的出现而重新绘制。您可以在 Main form sourceforge.net/p/clip-angel/code 的源代码中找到它