我的程序完成计算需要一些时间,所以我想运行它,同时阅读一些网页,当屏幕闪烁(完成计算的通知)时,我会回到我的程序。
唯一缺少的部分是 - 如何在C#中刷新整个屏幕?如果这很重要,我会使用WPF。
请注意 - 我的程序不可见,其他程序(例如网络浏览器)占用整个屏幕(这就是问题所在,因为否则,我不需要任何通知)。
Flash =闪烁。
答案 0 :(得分:4)
我的第一种方法是:在计算完成后,程序打开一个具有透明背景的新的最顶层窗口,并将其设置为某种颜色(白色)一段短暂的间隔并再次关闭窗口。请注意,当窗口位于顶部时,您将无法在闪烁期间与底层窗口进行交互,因为窗口将占用这些事件。或者,您可以执行大多数其他Windows应用程序(如outlook或messenger)执行的操作:显示可单击的简短通知框,以转到相关应用程序(您的程序)。
答案 1 :(得分:4)
我认为更“正常”的做法是将应用程序安装为系统托盘图标 - 然后您可以在状态发生任何变化时进行更改。
答案 2 :(得分:2)
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern Int16 FlashWindowEx(ref FLASHWINFO pwfi);
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct FLASHWINFO {
public UInt32 cbSize;
public IntPtr hwnd;
public UInt32 dwFlags;
public UInt32 uCount;
public UInt32 dwTimeout;
}
public const UInt32 FLASHW_STOP = 0;
public const UInt32 FLASHW_CAPTION = 1;
public const UInt32 FLASHW_TRAY = 2;
public const UInt32 FLASHW_ALL = 3;
public void Flash() {
FLASHWINFO flashInfo = new FLASHWINFO();
flashInfo.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(flashInfo);
flashInfo.hwnd = this.Handle; // get the window handle
flashInfo.dwFlags = FLASHW_TIMERNOFG | FLASHW_ALL;
flashInfo.uCount = UInt32.MaxValue;
flashInfo.dwTimeout = 0;
FlashWindowEx(ref flashInfo);
}
答案 3 :(得分:1)
我认为您不能在技术上使用WPF刷新屏幕。也许有Win32功能。但是,是否可以制作屏幕截图并显示一个显示该屏幕截图的修改版本的Windows?此窗口必须声明为TopMost并覆盖您的屏幕,并且可以通过增加alpha通道来修改您的图像。
编辑:好的,我想我误解了“闪光”。如果你只是想用一种颜色显示一个闪烁的矩形,看看Mamta Dalal发布的帖子。