![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 02.11.2013
Сообщений: 3
|
![]()
Здравствйте. Мне необходмо написать (без готовых решений) нечто вроде представления WinAPI GUI в виде объектов (Например классы Form, Button, Textarea и тд), и если проблем с созданием самих окон нет как таковых (обертываем в конструкторы с параметрами WinAPI функции), то с обработкой сообщений я так и не придумал как сделать красиво и правильно, хотя идеи и есть. Хочется что бы в итоге это можно было использовать как например в C# в Windows.Forms -что то вроде Window.AddEventHandler(button, "click", this->buttonclick); или прязка к объекту, например, у класса Button есть метод Click(); , при клике на нее, выполнялся именно метод Click объекта на котором он произешел. Думаю понятно. Пишу на C++ . Буду благодарен за любую помощь, советы, примеры.
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
![]()
Посмотрите как сделано в MFC.
Посмотрите как сделано в wxWidgets. Посмотрите как сделано в QT. Самый простой вариант - привязать объект окна к HWND и сделать виртуальный метод OnMessage. |
![]() |
![]() |
![]() |
#3 |
Регистрация: 02.11.2013
Сообщений: 3
|
![]()
У меня была идея на этот счет, сделать в основном классе приложения static map<HWND, "Мойбазовыйклассокон"> и при каждом создании элемента управления добавлять в его конструкторе его HWND в этот map, а в глобальном цикле сообщений искать объект в этом map, но реализация показалась некрасивой, или нормально? MFC и Qt сложноваты для чтения для меня, у меня маловато опыта что бы разбираться в настолько крупных вещах изнутри, да и в Qt насколько знаю иной принцип, там вообще дочерние элементы(кнопки и тд) не создаются как окна, а рисуются Opengl и ищутся по своим координатам
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 13.11.2013
Сообщений: 149
|
![]()
Если еще интересно, я начал разработку подобной обертки.
Довольно долго пытался реализовать наиболее удобный способ обработки сообщений. На данный момент реализация выбрана и пока не вижу более удобных вариантов. Разработка проекта на https://github.com/nikmoon/ComfortableWindows Готов обсудить любые вопросы и предложения. |
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
![]()
Если будете сами пользоваться такой оберткой, то сойдет...
Самого себя можно ограничить не использовать GWLP_USERDATA, а вот поди объясни это другим... ID окна можно брать из самого окна - зачем хранить в переменной... ![]() |
![]() |
![]() |
![]() |
#6 | |
Форумчанин
Регистрация: 13.11.2013
Сообщений: 149
|
![]() Цитата:
Насчет ID возможно Вы правы, однако пока не мешает, а дальше видно будет. |
|
![]() |
![]() |
![]() |
#7 | |
Регистрация: 02.11.2013
Сообщений: 3
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 15.01.2010
Сообщений: 948
|
![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Unicode-обертка над std::stream | Granus | Общие вопросы C/C++ | 13 | 19.12.2012 22:04 |
Flash-обертка для управления звуком | Zer0 | Фриланс | 0 | 13.08.2012 13:19 |
Над Desktop'ом но под всеми остальными окнами | Crivel | Общие вопросы Delphi | 6 | 18.06.2009 11:25 |
Паскаль ООП. Примеры программ с использованием ООП | SeЯgey | Помощь студентам | 5 | 13.05.2009 21:55 |