Итак, у меня есть мой главный диалог, который вызывает немодальные диалоги через эту функцию (это старый код проекта):
void MyClass::ShowDialog(CDialog* dialog)
{
if (!IsWindow(dialog->m_hWnd))
{
return;
}
int nCmdshow1 = dialog->IsWindowVisible() ? SW_HIDE : SW_SHOW;
dialog->ShowWindow( nCmdshow1 );
}
Проблема: все поддиалоги остаются поверх моего основного диалога.
Желаемое поведение: какой бы ни был сосредоточен (все они немодальные), будь то главный диалог или поддиалоги, я хочу, чтобы это был самый верхний диалог. Спасибо!
Заметка: Я уже пробовал на мой главный диалог OnInitDialog()
эти, но не работали:
1. SetWindowPos(&this->wndTop,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
2.SetWindowPos(&this->wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
РЕДАКТИРОВАТЬ
Кроме того, поддиалоги создаются следующим образом:
m_subDlg1->Create( SubDlg1::IDD, this );
Пока есть связь владельца между двумя окнами. владелец окна никогда не может быть поверх собственного окна.
Окна в отношениях владелец, родитель, потомок всегда ведут себя одинаково. Окно «владелец / ребенок» всегда находится над родителем / владельцем.
Если вы хотите разорвать это, вы должны разорвать отношения владелец / ребенок. Пусть все диалоговые окна не имеют владельца … чем они могут свободно перемещаться.
Но: я буду ожидать, что ваша программа не ведет себя лучше. Еще хуже. Пользователь может искать окна, которые находятся глубоко внизу под другими окнами. И они никогда не окажутся впереди, когда ваша программа станет активной.
Смотрите описание родительских / дочерних / собственных окон здесь. Также это статья может быть полезным
Редактировать: Проблема в том, что внутренне MFC устанавливает главное окно в качестве владельца, если родитель не указан. Только звонок BOOL Wnd::CreateDlgIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd, HINSTANCE hInst)
позволяет оставить pParentWnd NULL.
Таким образом, вы можете создать окно как обычно, но использовать SetParent (NULL) после того, как оно было создано. Опять МФЦ АССЕРТЫ это. Таким образом, вы можете использовать функцию API и дескриптор вашего диалога.
Других решений пока нет …