|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 3, 2004 22:36:35 · Поправил: Loger Имеются: Класс окна: hbrBackground = NULL Окно: WS_EX_TRANSPARENT | WS_EX_TOPMOST Если указать, что WM_PAINT обрабатывается (вернуть 0 из WndProc), то окно ведёт себя так, будто его нет: на месте окна отрисовывается то, что должно быть под ним. При этом на окне можно рисовать, получив контекст утройства через GetDC, но загрузка проца при этом 100%. Если жу получать контекст устройства через BeginPaint, то на месте окна будет виден тот кусок экрана, который был под окном, когда оно появилось на экране, даже если изображение на этой части экрана с тех пор изменилось. Как можно рисовать через BeginPaint так, чтобы это выглядело, будто я рисую на самом экране (поверх всех других окон)? |
|
|
Дата: Ноя 3, 2004 23:11:29 А ты через OpenGL бы попробовал ... помоему гораздо проще будет |
|
|
Дата: Ноя 3, 2004 23:18:31 Через OpenGL не катит. Нужно, чтобы окна, лежащие под моим, могли свободно перерисовываться и это отображалось на экране |
|
|
Дата: Ноя 4, 2004 00:02:18 был под окном, когда оно появилось на экране, даже если изображение на этой части экрана с тех пор изменилось IMHO, если перед окном или его частью есть другое окно, то "затенённый" участок окна не подлежит перерисовке. То есть нужно самому инициировать перерисовку окон, лежащих под твоим. Получать их через GetNextWindow... |
|
|
Дата: Ноя 4, 2004 00:36:32 · Поправил: jekyll [deleted] |
|
|
Дата: Ноя 4, 2004 00:38:14 · Поправил: jekyll [deleted] |
|
|
Дата: Ноя 4, 2004 00:38:49 Я делал так: 1. Получал контекст через GetDC 2. Создавал memDC, в нем все рисовал 3. Вызывал BeginPaint 4. Делал BitBlt 5. Вызывал EndPaint 6. Делал ReleaseDC Получать контекст через BeginPaint в данном случае неправильно, т.к. функция возвращает только контекст, кот. нужно перерисовать, а это может быть часть твоего окна. А что это должно быть в итоге? |
|
|
Дата: Ноя 4, 2004 01:09:07 А BeginPaint точно должно быть между GetDC и ReleaseDC? А что это должно быть в итоге? Ничего особенного, просто экспеременитрую, пытаясь создать прозрачное окно без WS_EX_LAYERED |
|
|
Дата: Ноя 4, 2004 01:19:49 Если я правильно понял суть вопроса: > но загрузка проца при этом 100% потому что invalid region без BeginPaint/EndPaint не становится валидным и окну постоянно посылается WM_PAINT; избежать этого можно, вызвав в конце DefWindwProc; >чтобы это выглядело, будто я рисую на самом экране может, на самом экране и рисовать - GetDC(0);? Когда-то я писал подобную программу, только я вообще не обрабатывал WM_PAINT, а рисовал себе что мне нужно по таймеру. WM_PAINT не нужен был потому, что окно WS_EX_TOPMOST все равно никто не мог перекрыть (окно было размером с экран). |
|
|
Дата: Ноя 4, 2004 01:29:21 Loger > Имеются: Класс окна: hbrBackground = NULL Окно: WS_EX_TRANSPARENT | WS_EX_TOPMOST Вобще-то лучше код приводить, желательно весь исходник, чтоб можно было скомпилить и проверить, а не гадать.. |
|
|
Дата: Ноя 4, 2004 01:39:53 |
|
|
Дата: Ноя 4, 2004 02:44:57 Мне сейчас лень разбираться что-там у тя не правильно, вот исходник, кто-то из наших переделывал тутор Iczelion'а, я только добавил стиль WS_EX_TOPMOST - вроде все нормально работает, выход из проги по двойному клику по картинке, если запустить файл без dll'ки прога повиснет, нужно добавить проверку чтоб этого избежать. 384481375__skinwindow.rar |
|
|
Дата: Ноя 4, 2004 21:02:38 Asterix В твоём исходнике создаётся регион, который назначается окну через SetWindowRgn, органичивая область его перерисовки. А мне нужно, чтобы окна под ним перерисовывались, а я уже мог рисовать поверх того, что нарисовали нижележащие окна. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.060 |