Войти
ПрограммированиеФорумГрафика

Рисование на десктопе без мерцания.

#0
17:16, 14 мар. 2015

Cтоит задача - сделать к игрушке, которая запускается в окне на рабочем столе (десктопе), рамку в 10 пикселей по границам десктопа, вот, такая фича, так нужно.

Стандартное решение с отрисовкой через дескриптор десктопа содержит очень серьёзную проблему мерцания при наличии каких-либо изменений на заднем фоне:

HDC hDC = GetDC(0);
HBRUSH red = CreateSolidBrush(RGB(255, 0, 0));
RECT rect = { 0, 0, 10, 1080 };  FillRect(hDC, &rect, red);
RECT rect1 = { 10, 0, 1910, 10 };  FillRect(hDC, &rect1, red);
RECT rect2 = { 10, 1070, 1910, 1080 };  FillRect(hDC, &rect2, red);
RECT rect3 = { 1910, 0, 1920, 1080 };  FillRect(hDC, &rect3, red);

Обновлять каждую милисекунду - это не выход.

Вроде как эту проблему можно решить, если перехвать событие завершение отрисовки десктопа до непосредственно вывода его операционной системой в передний буфер (на экран).

Вопрос - какой параметр нужно подставить в SetWindowsHookEx (и, если можно, прототип функции обработчика), чтобы перехватить такое событие и добавить туда код отрисовки рамки?


#1
17:48, 14 мар. 2015

А если привязать к окну игры 4 окна без рамок с черным цветом фона?

#2
9:21, 15 мар. 2015

fullspektr
> А если привязать к окну игры 4 окна без рамок с черным цветом фона?
Окно нельзя установить поверх панели с пуском и часами.

Что, неужели на форуме ни кто с хуками не работал?

#3
10:30, 15 мар. 2015

Sazon++
>Окно нельзя установить поверх панели с пуском и часами.
Можно.

#4
10:32, 15 мар. 2015

Если я всё правильно понял, надо гуглить в сторону NC сообщений.

#5
10:52, 15 мар. 2015

Sazon++
Какой смысл рисовать на рабочем столе вообще? А если кроме игры еще будут окна. Их тоже перехватывать будешь?
Я делал рамки с неоновой подсветкой на основе окон и все нормально работало.
Sazon++
> Окно нельзя установить поверх панели с пуском и часами.
А это тут причем? Игра перекрывает панель пуска? Если да, то значит она создает окно с флагом TOPMOST и ничего не мешает для рамки тоже такой флаг выставить. Если нет, то и рамке это не нужно.
Вообще проблем не вижу.

#6
16:34, 25 мар. 2015

nes
> Можно.

fullspektr
> Если да, то значит она создает окно с флагом TOPMOST и ничего не мешает для рамки тоже такой флаг выставить
Если нажать на панель ПУСК, то она перекроет TOPMOST окно.
Как это решать?

#7
17:59, 25 мар. 2015

А если в Windows 8.1 нажать кнопу пуск, то вообще вылезет "плитка".

А если нажать alt+cntr+del. ...  как это заблокировать.

Что, неужели никто не писал игры, которые можно отключить только заблокировав генератор местной электростанции ?

ПрограммированиеФорумГрафика

Тема в архиве.