С++ Рисование непосредственно на экране (например, наложение)

Многие ноутбуки теперь имеют горячие клавиши FN для изменения громкости, яркости и т.д. и обычно отображают визуальный сигнал, который отображается на экране полностью над операционной системой. Для новых систем Windows 8/8.1 этот визуал даже появляется за пределами рабочего стола на стороне метро. Они не могут рисоваться внутри окна без полей, иначе он не будет отображаться поверх интерфейса метро.

Я попытался выяснить, может ли DirectX напрямую рисовать на экране, но он не кажется, что он может. Я даже не знаю, следует ли мне заглядывать в OpenGL...?

У меня был некоторый успех с использованием GDI; в частности функцию GetDC с параметром NULL для захвата экранного устройства.

#include <Windows.h>

int main() {
    const HDC dc = GetDC(NULL);
    while (1) {
        Rectangle(dc, 100, 100, 500, 500);
    }
}

Однако это требует повторного рендеринга всего несколько раз, потому что моя область экрана может быть перезаписана другими окнами, меняющимися в фоновом режиме. И даже при повторном рендеринге в цикле происходит огромное мерцание экрана.

Как это делают OEM-производители этих ноутбуков?

Спасибо.

Ответ 1

Похоже, что это окна без полей. Например, просмотрите окно переключателя задач:

Borderless Window

Связанный вопрос: Windows 8 Слоистые окна над приложениями Metro

Если вам нужно окно поверх метро, ​​вам нужно объявить его доступность.