Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2013, 16:39   #1
Просто гость
Новичок
Джуниор
 
Регистрация: 18.07.2013
Сообщений: 1
Восклицание Кто разбирается дайте совет

Здравствуйте. У меня определенная проблема, но нет знаний чтобы понять ее суть. Но есть стремление. Объясните пожалуйста, каким образом можно изменить то, что отображается на мониторе в режиме реального времени - т.е. например, поверх программы повесить красный квадрат или какую нибудь рожицу, линию или точку. Не сочтите это глупым, это просто пример. Помогите пожалуйтста, профессионалы или хотя бы направьте на тот раздел форума где вопрос будет по адресу.
Просто гость вне форума Ответить с цитированием
Старый 18.07.2013, 17:36   #2
Stertor
Заблокирован
 
Регистрация: 17.07.2013
Сообщений: 104
По умолчанию

В Windows единицей всего отображаемого является окно. Следовательно, Вам нужно создать свое окно, задать ему прозрачность(SetLayeredWindowAttrib utes), растянуть на весь экран(узнать размеры экрана можно с помощью getsystemmetrics SM_CYSCREEN/SM_CXSCREEN ) и поставить это окно перед всеми остальными окнами.

Последний раз редактировалось Stertor; 18.07.2013 в 17:38.
Stertor вне форума Ответить с цитированием
Старый 19.07.2013, 20:04   #3
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Если нужно отобразить в определенном окне, то FindWindow поможет в этом и по полученному дескриптору можно получить его контекст (BeginPaint) и уже рисовать в его границах. При этом даже не надо создавать окно
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 19.07.2013, 20:14   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от kineziz Посмотреть сообщение
Если нужно отобразить в определенном окне, то FindWindow поможет в этом и по полученному дескриптору можно получить его контекст (BeginPaint) и уже рисовать в его границах. При этом даже не надо создавать окно
только чтоб рисовать нормально в окне придется перехватывать WM_PAINT
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.07.2013, 14:09   #5
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Ну не знаю, я пробовал рисовать на в окне калькулятора, получалось. Делал просто в цикле:

Код:
HWND hCalc = FindWindow(nullptr,"Калькулятор Плюс");
HDC hDC = GetDC(hCalc);
while (true)
     Rectangle(hDC,10,10,50,50);
ReleaseDC(hCalc,hDC);
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 20.07.2013, 14:23   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от kineziz Посмотреть сообщение
Ну не знаю, я пробовал рисовать на в окне калькулятора, получалось. Делал просто в цикле:

Код:
HWND hCalc = FindWindow(nullptr,"Калькулятор Плюс");
HDC hDC = GetDC(hCalc);
while (true)
     Rectangle(hDC,10,10,50,50);
ReleaseDC(hCalc,hDC);
а теперь потаскай окно
и так с любой перерисовкой целевого окна.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.07.2013, 14:41   #7
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Потаскал. Нечего не произошло. Квадрат даже не моргнул. Но я понял что вы имели ввиду и вы полностью правы. Тогда можете сказать как поставить такой hook
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 20.07.2013, 14:44   #8
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

message deleted
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.

Последний раз редактировалось kineziz; 20.07.2013 в 14:55.
kineziz вне форума Ответить с цитированием
Старый 20.07.2013, 15:47   #9
Stertor
Заблокирован
 
Регистрация: 17.07.2013
Сообщений: 104
По умолчанию

Цитата:
а теперь потаскай окно
и так с любой перерисовкой целевого окна.
Да, Вы правы. Нарисованное стирается, при потере фокуса, при заслонении или изменении размеров окна, на канве которого рисуют.

Цитата:
Тогда можете сказать как поставить такой hook
Если честно, не вижу смысла в этом. Код Ваш на удивление хорош; квадрат не исчезает, даже если заслонить окно калькулятора или минимизировать/развернуть его, потому, что рисует цикл. Так зачем же еще хукать? )
Stertor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто разбирается? Arslok Свободное общение 2 13.07.2013 23:04
кто разбирается в ассемблере? gylayko Фриланс 7 29.09.2011 15:18
Обработчик XML. Простой, удобный и шустрый, Дайте совет, кто чем пользуется Человек_Борща Общие вопросы Delphi 14 19.07.2011 20:40
Turbo C. Кто разбирается? schokky Помощь студентам 0 08.06.2010 17:30
C# помогите кто разбирается =) XbIxbI Помощь студентам 0 25.04.2009 20:06