пользовательский вызов эффекта перефокусировки showdialog

Есть ли способ заставить форму мигать, например ShowDialog, когда она теряет фокус?

Когда вы вызываете ShowDialog в форме Windows и пытаетесь выполнить другое действие, форма несколько секунд мигает, а затем фокусируется.

Есть ли способ вызвать это мерцание по-своему?


person Willem T    schedule 07.06.2012    source источник
comment
У вас есть собственная настраиваемая форма, которую вы отображаете, и вы хотите, чтобы она мигала? Не могли бы вы сделать что-нибудь в событии Deactivate, чтобы включить и выключить свойство Visible несколько раз в цикле.   -  person Gene S    schedule 08.06.2012


Ответы (1)


Попробуй это.

    [DllImport("user32.dll")]
    private static extern Int32 FlashWindowEx(ref FLASHWINFO pwfi);

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

    [Flags]
    private enum FLASHW: int {
        // stop flashing
        FLASHW_STOP = 0x00,
        // flash the window title
        FLASHW_CAPTION = 0x01,
        // flash the taskbar button
        FLASHW_TRAY = 0x02,
        // flash the window title and the taskbar button
        FLASHW_ALL = 0x03,
        // flash continuously
        FLASHW_TIMER = 0x04,
        // flash until the window comes to the foreground
        FLASHW_TIMERNOFG = 0x0c,
    }

    public static void FlashWindow(IWin32Window form, int count) {
        FLASHWINFO pwfi = new FLASHWINFO();
        pwfi.cbSize = (uint)Marshal.SizeOf(pwfi);
        pwfi.dwFlags = FLASHW.FLASHW_ALL;
        pwfi.dwTimeout = 0;
        pwfi.hwnd = form.Handle;
        pwfi.uCount = (uint)count;
        FlashWindowEx(ref pwfi);
    }

Расширьте его для своих нужд.

person joe    schedule 07.06.2012
comment
Строка FLASHW.FLASHW_ALL указывает мигать заголовку формы, а также кнопке на панели задач. Используйте либо FLASHW_CAPTION, либо FLASHW_TRAY, чтобы прошить их отдельно. Просто попробуйте. - person joe; 08.06.2012