Короткий ответ: Не совсем, нет.
Более длинный ответ: приложение «полноэкранное» использует дисплей другим способом, чем обычное приложение для Windows GUI. Именно то, как они работают, зависит от приложения и ОС; большинство из них будет использовать API DirectX или OpenGL, которые позволят приложениям напрямую манипулировать памятью, представляющей экран, а также получать доступ к ускоренным возможностям GPU. Эти приложения поддерживаются, в основном, создавая «окно» графического интерфейса (более похожее на панель), которое охватывает весь основной дисплей и «всегда на высоте», что предотвращает написание элементов рабочего стола, поскольку они всегда находятся за полноэкранным Окно приложения в Z-порядке. Затем приложение получает «расслабленный» доступ к памяти, представляющей прямоугольник отображения этого окна графического интерфейса, поэтому он может манипулировать отдельными пикселями без необходимости использовать цикл сообщений для перерисовки этой области.
В этой ситуации дисплей окрашивается, когда приложение хочет (что практически всегда «как можно быстрее» или «синхронизировано со следующей проверкой монитора»), НЕ, когда графический пользователь Windows считает, что это хорошее время , Итак, все, что написано, когда Windows думает, что это хорошая идея, будет мерцать; Windows рисует ваше окно «всегда сверху» над «окном» приложения в Z-порядке графического интерфейса пользователя, а затем приложение обращается к окну, рисуя непосредственно на его прямоугольник. Это заставляет Windows делать недействительными и перерисовывать окно, и цикл продолжается.
Решение состоит не только в том, чтобы сделать окно «всегда сверху», но и как-то программно «переключиться на задачи» из окна полноэкранного приложения в ваше. Это может потребовать, чтобы ваше приложение обладало привилегиями, которые большинство управляемых сред выполнения не могут или не будут предоставлять. Если это возможно, тогда, когда это произойдет, полноэкранное приложение скроет (что может быть или не быть ОГРОМНОЙ проблемой для ваших пользователей, независимо от того, что ваше приложение пытается мне сказать, почти наверняка не стоит минимизировать мой сеанс StarCraft 2 в середине онлайн-схватки).
О чем вы «мерцаете»? Я использовал 'setAlwaysOnTop()' без мерцания или проблемы. –
Прежде чем вы перейдете к переписанию своего приложения, рассмотрите это эссе: [Как создать верхнее окно, которое никогда не покрывается другими верхними окнами?] (Http://blogs.msdn.com/b/oldnewthing/ архив/2011/03/10/10138969.aspx) –
Пожалуйста, напишите, почему downvote, люди, пожалуйста? – deadfish