Создание контролов в чужом окне
Возможно ли имея хэндл окна другого приложения создавать в них контролы? Эти контролы будут нормально работать и получать сообщения?
Возможно.... но этим контролам прийдется делать сабклассинг...
Неужели без сабклассинга обойтись нельзя? И для чего конкретно проводить сабклассинг: для элемента управления или для оконной функции? И если провести сабклассинг для оконной функции приложения, то теряется функциональность приложения, разве не так?
Может можно как-то на чужое окно наложить свое прозрачное, но чтобы контролы на моем прозрачном окне были непрозрачными и нормально работали поверх того? Это возможно? =)
Код:
myWnd->BringWindowToTop();
Мне хочется организовать группу программистов. Нужна любая поддержка и идеи.
Язык программирования, на котором ты пишешь значения не имеет!
Код:
myWnd->BringWindowToTop();
Не помогвет. К тому же WS_EX_TOPMOST и так на первое место в Z-order окно ставит.
Я что-то вообще никакой информации не смог нарыть про то, как свой контрол в чужое окно добавить.. Неужели так редко такие идеи возникают? ) То что это возможно как-то, знаю. А вот как... =)
А что Вы хотите сделать, конкретней пожалуйста? Одним из вариантов могу предложить следующий. Открыть исполняемый файл в режиме редактирования ресурсов в одной из сред разработки- Microsoft Visual C++ или Borland C++ 5.02 (5.02-не выше). Поместить нужные контролы в окно и пересохранить файл. Если же нужно динамически создавать элементы управления, то проблемы возникают с их прорисовкой. В этом случае прийдётся создавать HOOK для того, чтобы отлавливать сообщение перемещения окна (и не только перемещения) и принудительно прорисовывать либо ту часть окна, в которой располагаются созданные Вами элементы управления, либо всё окно.
Цитата: SergPas
А что Вы хотите сделать, конкретней пожалуйста?
В окна покерных столов добавлять вывод некоторой статистики, вероятностей, кнопачки редактирования инфы об игроках.
Цитата:
Одним из вариантов могу предложить следующий. Открыть исполняемый файл в режиме редактирования ресурсов в одной из сред разработки- Microsoft Visual C++ или Borland C++ 5.02 (5.02-не выше). Поместить нужные контролы в окно и пересохранить файл.
Не, контролы должны добавляться динамически, и пользователь не должен это делать вручную =)
Цитата:
Если же нужно динамически создавать элементы управления, то проблемы возникают с их прорисовкой. В этом случае прийдётся создавать HOOK для того, чтобы отлавливать сообщение перемещения окна (и не только перемещения) и принудительно прорисовывать либо ту часть окна, в которой располагаются созданные Вами элементы управления, либо всё окно.
Не совсем понял.. Проблемы с прорисовкой действительно есть, контролы перекрываются, но если отдать команду на перерисовку окна или его части, контрол также будет затерт.
Например, если вытаскивать окно изза края экрана, контрол виден (правда в полосочку, если рывками тащить), а после того, как окно обновится, то поверх него рисуется оконный контент.
Лично я бы применил в таком случае HOOK-функцию, в обработке которой и обновлял окно чужого приложения (UpdateWindow). Проверил... Работает... Элементы управления перерисовываются; побочные явления, связанные с перерисовкой, не наблюдаются. Здесь следует быть очень осторожным, так как могут возникать конфликты при накладке создаваемых программистом элементов управления на контролы чужого окна. И вместо дочернего окна класса "STATIC" применяй вывод текстовой информации в окно с помощью функции DrawText.