![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| nerdy_weirdie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
Мне нужно сделать так, чтобы окно рисовалось всегда только в специально созданное виртуальное устройство CDC.
В винапи нашел функцию GetDC(HWND), а вот SetDC не вижу. Как это сделать? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
А нет ее. Контекст окна всегда создается и поддерживается системой. Программист может его только получить.
Но виртуальный контекст создать можно - CreateCompatibleDC, и рисуй там сколько влезет. А в обработчике WM_PAINT окна просто скопируй содержимое виртуального контекста в контекст окна. -------------------- ... |
|||
|
||||
| nerdy_weirdie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
Большое спасибо за подсказку! Только умоляю, капельку подробнее скажи как обработчик переопределять. Окно - COM-объект с закрытым кодом. HWND из него достается без проблем, а дальше как обработчики вешать не понимаю что-то.. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Насчет того, можно ли так изувечить COM-окно, не скажу, нет опыта. Но чисто теоретически, любому окну можно подменить оконную процедуру, и уже в ней извращаться. Конечно, не забывая отдавать управление родной.
Однако, боюсь, тебя это не спасет. Кто рисовать-то будет? Я думала, это твой код. Если ты хочешь, чтобы чужое окно окно нарисовало себя в заданный контекст, попробуй отправить ему сообщение WM_PRINT. Если окно кошерное, должно его обработать. Подробности про WM_PRINT поищи по форуму, вроде было. А если задача другая, то опиши ее. -------------------- ... |
|||
|
||||
| nerdy_weirdie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
Основная цель на самом деле не отрисовать в устройство, а перенаправить весь вывод из дефолтного монитора, чтобы объект не мешал пользователю. А то он при создании сразу фокус перехватывает и окно с которым работает пользователь его теряет, в не зависимости, устанавливаю ли я ему SW_HIDE. Т.е. объект создается невидимым, но кратковременное переключение фокуса всё же происходит.
Это сообщение отредактировал(а) nerdy_weirdie - 22.9.2010, 22:22 |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Я думаю, что перехват фокуса никак не связан с отображением окна. Так что путь ты выбрал неверный.
Раз проблема в потере фокуса, то с ней и надо бороться. Возможно, ты гасишь окно позже, чем оно хватает фокус. Кроме того, можно попробовать просто перехватить WM_SETFOCUS. -------------------- ... |
|||
|
||||
| nerdy_weirdie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
Вобщем-то с этой тулзой кажется разобрался.
Но меня всё равно очень интересует как перекидывать окна между мониторами. Уж очень здесь что-то мутно.. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |