none
Мерцание заголовка в дочерном окне RRS feed

  • Вопрос

  • Приложение на WPF и я конечно же отказываюсь от стандартного представления окон (то есть WindowStyle="None"). Но вот какой нюанс -  если открыто дочерное окно (вызвано ShowDialog) и попытаться обратиться к родителю, то в классической схеме мы увидим мерцание заголовка дочерного окна, которое говорит нам "я открыто, пока не закроешь меня туда нини", но в моем подходе только слышен звуковой сигнал и есть мерцание в панеле задач (и то в 7-ке значки сгруппированы и мерцание не заметно).

    Я знаю что в этот момент дочерное окно получает сообщение от системы и обработав его можно реализовать свою анимацию и легко решить задачу, но я напрочь забыл какое именно сообщение и чего то не могу найти.

    Буду рад подсказке (если будет код на VB буду рад втройне).


    Влюблен в WPF Не пишу на C#
    22 января 2012 г. 8:41
    Отвечающий

Ответы

  • В статье на которую вы дали ссылку говорят, что такого сообщения нет и можно попробовать WM_WINDOWPOSCHANGING, но как выяснилось это сообщение не помогает, за то с помощью Spy++ я нашел сообщение WM_NCACTIVATE, которое в обычном состоянии шлет True если оно активно и False если не активно, но если же мы имеем ситуацию описанную в вопросе, то это сообщение шлется N-е число раз (не успеваю посчитать) с переменой True на False и останавливается на True.

    Результат - за секунду окно получает одно и то же сообщение с разными параметрами, пытается визуализировать себя для состояний "Активно" и "Неактивно", что и создает эффект мерцания.

    Решение - отслеживаем эту канонаду из WM_NCACTIVATE и реагируем на это как пожелаем.


    Влюблен в WPF Не пишу на C#
    • Помечено в качестве ответа LXGDARKEditor 24 января 2012 г. 10:30
    24 января 2012 г. 10:30
    Отвечающий

Все ответы

  • Здравствуйте.

    Попробуйте примениь решение отсюда - When Modal Dialog is shown in WPF and a user clicks on the parent window, make the modal dialog flash, blink or shake

    Также в Visual Studio есть инструмент Spy++, можете с помощью него найти нужное окно и посмотреть какие события ему отправляются.


    Для связи [mail]
    24 января 2012 г. 8:15
  • В статье на которую вы дали ссылку говорят, что такого сообщения нет и можно попробовать WM_WINDOWPOSCHANGING, но как выяснилось это сообщение не помогает, за то с помощью Spy++ я нашел сообщение WM_NCACTIVATE, которое в обычном состоянии шлет True если оно активно и False если не активно, но если же мы имеем ситуацию описанную в вопросе, то это сообщение шлется N-е число раз (не успеваю посчитать) с переменой True на False и останавливается на True.

    Результат - за секунду окно получает одно и то же сообщение с разными параметрами, пытается визуализировать себя для состояний "Активно" и "Неактивно", что и создает эффект мерцания.

    Решение - отслеживаем эту канонаду из WM_NCACTIVATE и реагируем на это как пожелаем.


    Влюблен в WPF Не пишу на C#
    • Помечено в качестве ответа LXGDARKEditor 24 января 2012 г. 10:30
    24 января 2012 г. 10:30
    Отвечающий