Убрать мерцание заголовка при переключении дочерних окон MDI
От: Axepert  
Дата: 16.12.10 07:17
Оценка:
День добрый.

Ситуация такая.
Дочерние формы имеют


WindowState = FormWindowState.Maximized



Из дочерней формы можно переключится на любую другую. Реализую это путем SetFocus() или BringToFront() не имеет значения.

Так вот когда переключаюсь между дочерними окнами происходит мерцание заголовка окон.
Сначала как будто бы на короткое время рисуется окно в нормальном состоянии (WindowState = FormWindowState.Normal),
и только потом оно растягивается на все окно.

Как этого избежать ???

Заранее благодарен.
Re: Убрать мерцание заголовка при переключении дочерних окон
От: Axepert  
Дата: 16.12.10 11:59
Оценка:
Здравствуйте, Axepert, Вы писали:
Неужели, ни кто не сталкивался???

Re[2]: Убрать мерцание заголовка при переключении дочерних о
От: MozgC США http://nightcoder.livejournal.com
Дата: 16.12.10 16:07
Оценка: 2 (1)
Здравствуйте, Axepert, Вы писали:

A>Неужели, ни кто не сталкивался???

A>

Простите, что за 2.5 часа вам не ответили

По теме: у меня ничего не моргает. Чтобы не гадать в чем дело можете выложить тестовый проект, который воспроизводит проблему.
Re[3]: Убрать мерцание заголовка при переключении дочерних о
От: Axepert  
Дата: 17.12.10 09:43
Оценка:
Здравствуйте, MozgC, Вы писали:

MC>По теме: у меня ничего не моргает. Чтобы не гадать в чем дело можете выложить тестовый проект, который воспроизводит проблему.


FrameWork 3.5


Создаем WindowsFormsApplication
Добавляем к проекту MDI Parent Form
В Классе Program

Application.Run(new From1());

заменяем на

Application.Run(new MDIParent1());

проект готов!

Запускаем

Создаем несколько новых окон (Ctrl+N)
Раскрываем одно из них на весь экран

заходим в меню Windows и переключаемся между окнами, нажимая на Windows0, Windows1, Windows2...

Эффект на лицо.

Наблюдается на win 7 и win XP

Параметры машины Intel Pentium Q8400 4 гб памяти.

Может вижу это только я???
Re[4]: Убрать мерцание заголовка при переключении дочерних о
От: Axepert  
Дата: 17.12.10 09:45
Оценка:
Мерцают именно дочерние окна...
не только их заголовки.
Re: Убрать мерцание заголовка при переключении дочерних окон
От: Sinix  
Дата: 17.12.10 09:50
Оценка: 2 (1)
Здравствуйте, Axepert, Вы писали:

A>Как этого избежать ???

Код надёргал из нескольких классов — проверяйте!
    private const WM_MDINEXT = 0x0224

    [DllImport("user32.dll")]
    private static extern IntPtr SendMessage(HandleRef hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

    [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode),
     SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
    private static void SendMessage(IWin32Window window, MessageCode msg, IntPtr wParam, IntPtr lParam)
    {
      HandleRef handleRef = new HandleRef(window, window.Handle);
      SendMessage(handleRef, (uint)msg, wParam, lParam);
    }

    public void Activate(Form form)
    {
      Code.NotNull(form, "form");
      if (MdiClient != null
       && form != ParentForm.ActiveMdiChild
       && form.ParentForm == this)
      {
        int position = MdiClient.Controls.IndexOf(form);
        Form formToCall;
        int direction;
        if (position == 0)
        {
          formToCall = (Form)MdiClient.Controls[1];
          direction = 1;
        }
        else
        {
          formToCall = (Form)MdiClient.Controls[position - 1];
          direction = 0;
        }

        SendMessage(MdiClient, MessageCode.WM_MDINEXT, formToCall.Handle, new IntPtr(direction));
      }
      else
      {
        base.Activate(form);
      }
    }
Re: Убрать мерцание заголовка при переключении дочерних окон
От: Sinix  
Дата: 17.12.10 09:52
Оценка: 2 (1)
Здравствуйте, Axepert, Вы писали:

UPD. Нашёл откуда утащил идею:
http://www.codeproject.com/KB/bugs/MgdMDIClientActivation.aspx
Re[2]: Убрать мерцание заголовка при переключении дочерних о
От: Axepert  
Дата: 17.12.10 11:34
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, Axepert, Вы писали:


S>UPD. Нашёл откуда утащил идею:

S>http://www.codeproject.com/KB/bugs/MgdMDIClientActivation.aspx

Спасибо помогло!
Re[3]: Убрать мерцание заголовка при переключении дочерних о
От: Axepert  
Дата: 17.12.10 11:44
Оценка:
Здравствуйте, Axepert, Вы писали:

A>Здравствуйте, Sinix, Вы писали:


S>>Здравствуйте, Axepert, Вы писали:


S>>UPD. Нашёл откуда утащил идею:

S>>http://www.codeproject.com/KB/bugs/MgdMDIClientActivation.aspx

A>Спасибо помогло!


Немного поторопился...

переключается без мерцания... но при этом если много окон, то почему-то заметно тормозит.
Re[4]: Убрать мерцание заголовка при переключении дочерних о
От: Axepert  
Дата: 17.12.10 11:47
Оценка:
Здравствуйте, Axepert, Вы писали:

A>Здравствуйте, Axepert, Вы писали:


A>>Здравствуйте, Sinix, Вы писали:


S>>>Здравствуйте, Axepert, Вы писали:


S>>>UPD. Нашёл откуда утащил идею:

S>>>http://www.codeproject.com/KB/bugs/MgdMDIClientActivation.aspx

A>>Спасибо помогло!


A>Немного поторопился...


A>переключается без мерцания... но при этом если много окон, то почему-то заметно тормозит.


Опять поторопился...при стандартном приключении тормозит так же...
ничего не понимаю... неужели нельзя было нормально реализовать FrameWork ???

или я все таки что-то упускаю?
Re[5]: Убрать мерцание заголовка при переключении дочерних о
От: Sinix  
Дата: 17.12.10 13:05
Оценка:
Здравствуйте, Axepert, Вы писали:

A>Опять поторопился...при стандартном приключении тормозит так же...

A>ничего не понимаю... неужели нельзя было нормально реализовать FrameWork ???

A>или я все таки что-то упускаю?

Это грабли не фреймворка, а нативных контролов. В дельфях те же проблемы.
Re[4]: Убрать мерцание заголовка при переключении дочерних о
От: MozgC США http://nightcoder.livejournal.com
Дата: 17.12.10 14:36
Оценка:
Здравствуйте, Axepert, Вы писали:

A>Создаем WindowsFormsApplication

A>...

И все-таки лучше выложите куда-нибудь проект в архиве.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.