2015-04-16 4 views
1

Наша компания продает два разных приложений и написанных на C++ с MFC 8.0Модальные Диалоги не открывается как самое верхнее окно

В обоих приложении мы создаем и открытые диалоги модальные, как это:

dlg_options myOptions; 
myOptions. DoModal(); 

Этот это то, как мы это делаем уже почти 10 лет. У нас есть несколько сотен клиентов с широким диапазоном версий Windows (от XP до 8.1), и он всегда работал хорошо таким образом.

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

Я не мог исправить эту проблему, но на его машине (Win 8.1) клиент установил некоторые расширения для Windows, как другое меню пуска, поэтому я нашел что-то виноватое. На самом деле система была испорчена. Было даже больше, чем одно приложение меню запуска! После переустановки Windows все было в порядке.

Сегодня у меня снова была проблема с другим приложением и другим клиентом. Его система снова была Windows 8.1, но на этот раз я не смог найти расширение Windows.

Было одно и то же, что и у обеих систем. Вы не могли переключаться между приложениями с помощью клавиш tab + alt. Даже когда наше программное обеспечение не запускалось, вы не могли переключаться. Когда наше приложение запускалось, вы можете использовать tab + alt, чтобы вернуть модальный диалог с фона на передний план. Это было очень приятно, но окно должно быть на переднем плане с самого начала.

Я понятия не имею, что там происходит и нет способа найти эту ошибку. Есть ли у кого-то подобный опыт? Что здесь происходит?

+0

В случае, когда ваше диалоговое окно не выходит на передний план, ваше окно приложения мигает на панели задач? Существуют хаки, связанные с вызовами «SetWindowPos», которые могут заставить относительное позиционирование, но вы можете в конечном итоге раздражать пользователя, захватив фокус, если ваше приложение в фоновом режиме в то время. –

ответ

-1

Вы должны сделать это по телефону:

SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); 
0

Я нашел аналогичный вопрос здесь: Focus on Modal Dialog (MFC)

Это, как представляется, проблема с родителем диалога. Вы можете попросить его объявить следующим образом:

CMyDlg dlg(this); 

Надеюсь, это поможет.

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