Рисование с помощью API: пиксели "смывает" после перекрывания окна другим окном
Собсно, вопрос: как реализировать режим AutoRedraw для контекста самостоятельно, через API например?
...
wc.style = CS_CLASSDC | CS_HREDRAW | CS_VREDRAW;
...
RegisterClassEx (&wc)
Ты видимо рисуешь в окне чужого приложения. Тогда тебе надо перехватить оконную процедуру и по WM_PAINT вызывать сначала родной обработчик, а потом уже самому рисовать что надо :)
К сожалению мне не катит такое решение. Я юзаю GDI+ и имею дело с полупрозрачностью в .png файлах, а если рисосовать каждый раз на одном и том же месте полупрозрачную картинку то она накладываеться на уже имеющуюся ее копию в контексте. Так что в результате нескольких перерисовок полупрозрачные пиксели на картинке становяться черными.
Я наконецто понял благодаря вашим ответам как иметь статическую картинку в контексте, но вот что делать когда прийнять во внимание выше сказанное?.. Может есть какая то API функция для сброса контекста до его визуализации?
Нее, ето тоже самое что и WM_PAINT. Оно посылаеться окну когда над етим окном перемещаеться другое окно.
Круто! Ето кажись то что надо. Но почему то не работает... Я делаю так:
CDC = CreateCompatibleDC(hDC)
...
;Вывожу пиксели в CDC
...
WM_PAINT:
Call BitBlt(hDC, 0, 0, Width, Height, CDC, 0, 0, SRCCOPY)
...
но форма остаеться пустой. Что я не так делаю?
Ты вообще пробовал то, что тебе посоветовал Некромант?
Да, я так делал. Точнее почти так :) Я при каждом WM_PAINT рисовал саму png картинку. Теперь я понял что делал не так. В прочем, ето я уже говорил в предыдущем своем посте.
На текущий момент я уже вдуплил как делать DC в памяти и рисовать в нем пиксели и потом копировать етот DC на форму. Делаю так:...
...
;заполняем структуру Bih
...
CDC = CreateCompatibleDC(0)
Cbmp = CreateDIBSection(0, Bih, 0, Bmp, 0, 0)
Call SelectObject(CDC, Cbmp)
WM_CREATE:
;рисуем в CDC пиксели...
...
WM_PAINT:
Call BitBlt(hDC, 0, 0, Width, Height, CDC, 0, 0, SRCCOPY)
...
...и все работает!
Спасибо вам всем за помощь! :)