2008-08-22 89 views
5

我正在開發一個控制機器的應用程序。
當我從機器收到錯誤時,用戶應該能夠直接注意到它,一種方法是在任務欄上閃爍托盤。當機器清除錯誤時,紙盤應停止閃爍。使用FlashWindowEx函數有一點煩惱,當我清除窗口的閃爍時,它保持(在我的情況下是winXP)橙色(不閃爍)。
Sample of statusFlashWindowEx FLASHW_STOP仍然保持任務欄有顏色


    [Flags] 
     public enum FlashMode { 
      /// 
      /// Stop flashing. The system restores the window to its original state. 
      /// 
      FLASHW_STOP = 0, 
      /// 
      /// Flash the window caption. 
      /// 
      FLASHW_CAPTION = 1, 
      /// 
      /// Flash the taskbar button. 
      /// 
      FLASHW_TRAY = 2, 
      /// 
      /// Flash both the window caption and taskbar button. 
      /// This is equivalent to setting the FLASHW_CAPTION | FLASHW_TRAY flags. 
      /// 
      FLASHW_ALL = 3, 
      /// 
      /// Flash continuously, until the FLASHW_STOP flag is set. 
      /// 
      FLASHW_TIMER = 4, 
      /// 
      /// Flash continuously until the window comes to the foreground. 
      /// 
      FLASHW_TIMERNOFG = 12 
     } 

     public static bool FlashWindowEx(IntPtr hWnd, FlashMode fm) { 
      FLASHWINFO fInfo = new FLASHWINFO(); 

      fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo)); 
      fInfo.hwnd = hWnd; 
      fInfo.dwFlags = (UInt32)fm; 
      fInfo.uCount = UInt32.MaxValue; 
      fInfo.dwTimeout = 0; 

      return FlashWindowEx(ref fInfo); 
     } 

     [StructLayout(LayoutKind.Sequential)] 
     public struct FLASHWINFO { 
      public UInt32 cbSize; 
      public IntPtr hwnd; 
      public UInt32 dwFlags; 
      public UInt32 uCount; 
      public UInt32 dwTimeout; 
     } 

在我來說,我使用FLASHW_TRAY開始閃爍並FLASHW_STOP停止閃爍。

我做錯了什麼,或者這是WinXP的一個已知錯誤,是否有修復?

回答

4

只要窗口應該閃爍,窗口的行爲就會一樣:任務欄按鈕保持着色狀態。我不認爲這是一個錯誤。如果你仔細想一想,當你使用FLASHW_STOP時,閃爍實際上會停止,但閃爍的一點是引起用戶的注意。該按鈕保持着色狀態,因爲用戶仍然可能沒有向下看並發現,其中的窗口正試圖引起她的注意。保持按鈕的顏色可以保持這些信息的可用性。

0

對不起,遲到了,我沒有辦公室。

如果這是預期的功能,我認爲它不是那麼有用,至少應該有一個重置。

我現在修復它只是使用FLASHW_ALL | FLASHW_TIMERNOFG組合。

順便說一句,不能評價你的答案,還沒有足夠的代表。

3

這裏有一個錯誤:

fInfo.uCount = UInt32.MaxValue;

與FLASHW_STOP參數調用時,您應該設置fInfo.uCount爲零。 否則,當您嘗試在任務欄按鈕處於活動狀態時調用停止時,它將保持活動狀態。

可以檢查備註未定義行爲在這裏: http://msdn.microsoft.com/en-us/library/windows/desktop/ms679348(v=vs.85).aspx

我知道這是一個老的文章,但它可以幫助其他人快速解決這個問題。

0

只需將uCount設置爲0即可停止閃爍。

+0

給你的答案添加一些解釋。 – Sandeep 2016-04-20 10:14:06