Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SetDC, Установить СDC для HWND 
:(
    Опции темы
nerdy_weirdie
Дата 22.9.2010, 05:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 16.1.2007

Репутация: нет
Всего: нет



Мне нужно сделать так, чтобы окно рисовалось всегда только в специально созданное виртуальное устройство CDC.
В винапи нашел функцию GetDC(HWND), а вот SetDC не вижу. Как это сделать?
PM MAIL   Вверх
Earnest
Дата 22.9.2010, 07:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



А нет ее. Контекст окна всегда создается и поддерживается системой. Программист может его только получить.
Но виртуальный контекст создать можно - CreateCompatibleDC, и рисуй там сколько влезет. А в обработчике WM_PAINT окна просто скопируй содержимое виртуального контекста в контекст окна.


--------------------
...
PM   Вверх
nerdy_weirdie
Дата 22.9.2010, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 16.1.2007

Репутация: нет
Всего: нет



Цитата(Earnest @  22.9.2010,  07:01 Найти цитируемый пост)
А в обработчике WM_PAINT окна просто скопируй содержимое виртуального контекста в контекст окна. 

Большое спасибо за подсказку! Только умоляю, капельку подробнее скажи как обработчик переопределять. Окно - COM-объект с закрытым кодом. HWND из него достается без проблем, а дальше как обработчики вешать не понимаю что-то..
PM MAIL   Вверх
Earnest
Дата 22.9.2010, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Насчет того, можно ли так изувечить COM-окно, не скажу, нет опыта. Но чисто теоретически, любому окну можно подменить оконную процедуру, и уже в ней извращаться. Конечно, не забывая отдавать управление родной.
Однако, боюсь, тебя это не спасет. Кто рисовать-то будет? Я думала, это твой код.
Если ты хочешь, чтобы чужое окно окно нарисовало себя в заданный контекст, попробуй отправить ему сообщение WM_PRINT. Если окно кошерное, должно его обработать. Подробности про WM_PRINT поищи по форуму, вроде было.
А если задача другая, то опиши ее.


--------------------
...
PM   Вверх
nerdy_weirdie
Дата 22.9.2010, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 16.1.2007

Репутация: нет
Всего: нет



Основная цель на самом деле не отрисовать в устройство, а перенаправить весь вывод из дефолтного монитора, чтобы объект не мешал пользователю. А то он при создании сразу фокус перехватывает и окно с которым работает пользователь его теряет, в не зависимости, устанавливаю ли я ему SW_HIDE. Т.е. объект создается невидимым, но кратковременное переключение фокуса всё же происходит.

Это сообщение отредактировал(а) nerdy_weirdie - 22.9.2010, 22:22
PM MAIL   Вверх
Earnest
Дата 23.9.2010, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Я думаю, что перехват фокуса никак не связан с отображением окна. Так что путь ты выбрал неверный.
Раз проблема в потере фокуса, то с ней и надо бороться. Возможно, ты гасишь окно позже, чем оно хватает фокус.
Кроме того, можно попробовать просто перехватить WM_SETFOCUS.


--------------------
...
PM   Вверх
nerdy_weirdie
Дата 23.9.2010, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 16.1.2007

Репутация: нет
Всего: нет



Вобщем-то с этой тулзой кажется разобрался.
Но меня всё равно очень интересует как перекидывать окна между мониторами. Уж очень здесь что-то мутно..
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.