Vra

Ek ontwikkeling van 'n program wat 'n masjien beheer.
Toe ek 'n fout ontvang van die masjien die gebruikers moet in staat wees om direk sien dit, een manier wat gedoen is Flashing die skinkbord op die taakbalk. Wanneer die masjien goedkeuring van die fout die skinkbord moet ophou flikker.

Daar is 'n klein ergernis met behulp van die FlashWindowEx funksie, toe ek die flikker van die venster skoon te maak, dit bly (in my geval WinXP) oranje (nie flikker).
monster van status


    [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;
        }

In my geval het ek gebruik FLASHW_TRAY te begin flikker en FLASHW_STOP om die flikker stop.

Doen ek iets verkeerd of is dit 'n bekende probleem van WinXP en is daar 'n oplossing vir dit?

Was dit nuttig?

Oplossing

gedrag is dieselfde as 'n venster afwerkings flikker vir so lank as wat dit veronderstel is om: die taakbalk knoppie bly gekleurde. Ek dink nie dit is 'n fout. As jy daaroor dink, wanneer jy FLASHW_STOP gebruik, die flikker nie in werklikheid stop, maar die punt van die flikker is om die aandag van die gebruiker se kry. Die knoppie bly gekleurde omdat die gebruiker nog nie het afgekyk en ontdek wat venster probeer om haar aandag te kry. Die behoud van die knoppie gekleurde hou dat inligting beskikbaar.

Ander wenke

Hier is 'n fout:

  

fInfo.uCount = UInt32.MaxValue;

Jy moet fInfo.uCount stel aan nul wanneer ek bel met FLASHW_STOP parameter. Anders wanneer jy probeer om op te hou roep wanneer taakbalk knoppie aktief sal dit aktief te bly.

Jy kan 'n nota oor undefined gedrag hier kyk: http://msdn.microsoft. com / af-ons / library / vensters / lessenaar / ms679348 (v = vs.85) Aspx

Ek weet dit is 'n ou post, maar dit kan help ander mense om hierdie probleem vinnig op te los.

Jammer vir die laat antwoord, ek was uit die kantoor.

As dit die verwagte funksionaliteit dink ek dit is nie so nuttig, ten minste moet daar 'n herstel wees.

Ek het dit nou net die gebruik van die FLASHW_ALL | FLASHW_TIMERNOFG kombinasie.

Btw, kan nie tans u antwoorde, nie genoeg rep nie.

Just stel uCount tot 0 om die flikker stop.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top