2013-08-20 2 views
0

Я работаю над приложением, которое отображает вещи (графику, тексты и т. Д.), Как экранное меню в Windows. Проблема в том, что я новичок в программировании окон, и я не нашел подходящего решения.Windows 7/8 Экран наложения VC++

Что я пробовал:

1: Я пытался создать многоуровневое окно с WS_EX_LAYERED флагом:

CreateWindowEx (WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_TOPMOST | WS_EX_TOOLWINDOW, szWindowClass, NULL , WS_POPUP | WS_VISIBLE | WS_SYSMENU, 0, 0, 0, 0, hWndDesktop, NULL, hInstance, NULL);

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

После поиска много я нашел другое решение моей проблемы:

2: Direct3D

Я нашел пример кода и хороший учебник по MSDN: http://msdn.microsoft.com/en-us/library/windows/desktop/dd797814(v=vs.85).aspx, но есть проблема (как всегда). Мне кажется, что он использует аппаратную накладку, которая не поддерживается на каждой видеокарте. Например: ATI Radeon HD 6XXXX. Но это именно то, что мне нужно.

Кто-нибудь знает правильное решение, которое не требует аппаратной поддержки? Или я сделал что-то неправильно?

+0

Просто используйте [код примера OSD] (http://msdn.microsoft.com/en-us/library/windows/desktop/dd940515%28v=vs.85%29.aspx) и настройте его так, как вы хочу это. –

+0

Я никогда не думал, что должен искать пример в аудио-образцах :) Спасибо! Я смотрю на это. – Norbert

+0

Это то же самое решение, которое я надумал в 1. Иногда он работает, а иногда и когда медиаплеер Windows находится в полноэкранном режиме. И я не знаю, почему. – Norbert

ответ

1

Я решил проблему. Я надеюсь, что это будет полезно для кого-то:

Так что единственная проблема в том, что я не привел окно на передний план после того, как нарисовал его. Вы можете сделать это, позвонив по номеру SetWindowPos. Хотя это решение не работает на поверхности метро Microsoft Windows 8.

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