2013-09-04 2 views
1
CMainDialog::DoSomething() 
{  
    CMyDialog1 dlg1; 
    dlg1.DoModal(); 

    CMyDialog2 dlg2; 
    dlg2.DoModal(); 
} 

Проблема заключается в том, что после возвращения dlg1 родительский диалог кратковременно отображается до отображения dlg2, вызывающего мерцание. Это нежелательно, как я могу избавиться от этого? Я использовал SetRedraw(FALSE) в вышеуказанной функции, но это не помогло.Мерцание между двумя диалоговыми окнами, отображаемыми один за другим

+1

Отображение двух диалогов подряд звучит как менее оптимальное дизайнерское решение. Если пользователю необходимо взаимодействовать с данными, которые распространяются в разных диалоговых окнах, чтобы выполнить задачу, вы должны рассмотреть возможность использования мастера. Мерцание не может быть легко предотвращено. Когда первое диалоговое окно закрывается, родительское окно активируется, что приводит к вызову 'RedrawWindow', который обходит очередь сообщений. Это поведение не может быть легко изменено. – IInspectable

+0

@ Изначально вы правы, мастер больше подходит для этого, но я не могу его использовать, потому что динамический размер страницы свойств/страниц, которые он должен иметь в моем приложении. – zar

ответ

0

В редакторе ресурсов перейдите к свойствам для CMyDialog1 и сделайте dlg1 изначально невидимым.

Когда вы готовы показать dlg1, используйте dlg1.ShowWindow(SW_SHOW).

Смежные вопросы