Имеются: Класс окна: hbrBackground = NULL Окно: WS_EX_TRANSPARENT | WS_EX_TOPMOST Если указать, что WM_PAINT обрабатывается (вернуть 0 из WndProc), то окно ведёт себя так, будто его нет: на месте окна отрисовывается то, что должно быть под ним. При этом на окне можно рисовать, получив контекст утройства через GetDC, но загрузка проца при этом 100%. Если жу получать контекст устройства через BeginPaint, то на месте окна будет виден тот кусок экрана, который был под окном, когда оно появилось на экране, даже если изображение на этой части экрана с тех пор изменилось. Как можно рисовать через BeginPaint так, чтобы это выглядело, будто я рисую на самом экране (поверх всех других окон)?
Через OpenGL не катит. Нужно, чтобы окна, лежащие под моим, могли свободно перерисовываться и это отображалось на экране
IMHO, если перед окном или его частью есть другое окно, то "затенённый" участок окна не подлежит перерисовке. То есть нужно самому инициировать перерисовку окон, лежащих под твоим. Получать их через GetNextWindow...
Я делал так: 1. Получал контекст через GetDC 2. Создавал memDC, в нем все рисовал 3. Вызывал BeginPaint 4. Делал BitBlt 5. Вызывал EndPaint 6. Делал ReleaseDC Получать контекст через BeginPaint в данном случае неправильно, т.к. функция возвращает только контекст, кот. нужно перерисовать, а это может быть часть твоего окна. А что это должно быть в итоге?
А BeginPaint точно должно быть между GetDC и ReleaseDC? Ничего особенного, просто экспеременитрую, пытаясь создать прозрачное окно без WS_EX_LAYERED
Если я правильно понял суть вопроса: > но загрузка проца при этом 100% потому что invalid region без BeginPaint/EndPaint не становится валидным и окну постоянно посылается WM_PAINT; избежать этого можно, вызвав в конце DefWindwProc; >чтобы это выглядело, будто я рисую на самом экране может, на самом экране и рисовать - GetDC(0);? Когда-то я писал подобную программу, только я вообще не обрабатывал WM_PAINT, а рисовал себе что мне нужно по таймеру. WM_PAINT не нужен был потому, что окно WS_EX_TOPMOST все равно никто не мог перекрыть (окно было размером с экран).
Loger > Имеются: Класс окна: hbrBackground = NULL Окно: WS_EX_TRANSPARENT | WS_EX_TOPMOST Вобще-то лучше код приводить, желательно весь исходник, чтоб можно было скомпилить и проверить, а не гадать..
Мне сейчас лень разбираться что-там у тя не правильно, вот исходник, кто-то из наших переделывал тутор Iczelion'а, я только добавил стиль WS_EX_TOPMOST - вроде все нормально работает, выход из проги по двойному клику по картинке, если запустить файл без dll'ки прога повиснет, нужно добавить проверку чтоб этого избежать. 384481375__skinwindow.rar
Asterix В твоём исходнике создаётся регион, который назначается окну через SetWindowRgn, органичивая область его перерисовки. А мне нужно, чтобы окна под ним перерисовывались, а я уже мог рисовать поверх того, что нарисовали нижележащие окна.