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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как создать owner draw контрол, Owner draw 
:(
    Опции темы
Курсант
Дата 30.12.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

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



Всем здравствуйте. Есть вопрос. Столкнулся с необходимостью писать свой контрол. Вопрос - как это делать, то ли регистрацией нового класса окна, то ли созданием класса в си ++, который уже сам будет заниматься визуализацией и регистрацией классов.. И вообще, можно ли регистрировать классы окон типа элемент управления. Собственно все, спасибо за внимание..
PM ICQ Skype   Вверх
xvr
Дата 30.12.2009, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Это сильно зависит от того ГДЕ и КАК вы собираетесь этот контрол применять. Наиболее универсальным будет сделать ActiveX control

PM MAIL   Вверх
Курсант
Дата 30.12.2009, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

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



Контрол собираюсь использовать в приложении для винды и для вин мобайл надо будет использовать, но не суть. Думаю для начала не стоит обнимать необъятное, и сделать не универсально, а для тренировки, только вопрос, можно ли регистрировать класс окна для контрола или нет? Хочу замесить все на сообщениях, надоели объекты и методы уже...       и примерчик быsmile
PM ICQ Skype   Вверх
xvr
Дата 30.12.2009, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Курсант @ 30.12.2009,  12:26)
Контрол собираюсь использовать в приложении для винды и для вин мобайл надо будет использовать, но не суть. 

Как раз суть - в голых Win32 API или в каком нибудь framework'е?
Цитата

только вопрос, можно ли регистрировать класс окна для контрола или нет? 
Если делать на голом Win32 API - то нужно. Соственно CommonControls так сделаны - вызов InitCommonControls грузит библиотеку и регистрирует все классы окон для всех контролов, которые он поддерживает.
Цитата

Хочу замесить все на сообщениях, надоели объекты и методы уже...
Вообще то все двигаются в обратном направлении - к объектам и методам. Ну для настоящих мазохистов можно и так  smile 
Цитата

и примерчик бы
Регистрируете свой класс окна. В оконной функции отписываете весь функционал вашего контрола. Весь обмен с ним будкт осуществляться через посылки сообщений.

PM MAIL   Вверх
Курсант
Дата 30.12.2009, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

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



Благодарю smile да, на чистом апи, просто каким то внутренним чутьем догадываюсь что потом проще будет выносить его из программы в какой нить активекс, хотя пока не разбирался как там все устроено, могу ошибаться, поэтому и вопрос..
PM ICQ Skype   Вверх
xvr
Дата 31.12.2009, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Курсант @ 30.12.2009,  20:00)
Благодарю smile да, на чистом апи, просто каким то внутренним чутьем догадываюсь что потом проще будет выносить его из программы в какой нить активекс, 

Неа. Пишите сразу ActiveX на каком нибудь framework'е (рекомендую ATL)
Любой контрол можно написать на API, но если он будет хоть чуть сложнее 'Hello world', то вся API машинерия может полностью поглотить логику самого контрола. Так сказать - 'за деревьями не видно леса'  smile 
Цитата

хотя пока не разбирался как там все устроено, могу ошибаться, поэтому и вопрос..
Так разберитесь, и оцените, что должен делать собственно сам контрол. Тогда можно будет прикинуть на чем его проще писать.

PM MAIL   Вверх
Курсант
Дата 1.1.2010, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

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



Спасибо за ответы smile с алгоритмами вроде определился, теперь еще пару вопросиков в надежде на ответ, т.К. Кроме мобильного и тетради с ручкой у меня никаких средств обработки и хранения информации нет smile 1. С какими флагами нужно регистрировать класс окна, чтобы его было можно помещать на клиента, и рисовать на нем поведение. 2. Лучше рисовать поведение, или все таки пользоваться стандартными компонентами, которые уже кидать на свой. Хотя тут мне кажется уместнее смешанный вариант.. 3. Как лучше делать - рисовать прямо на контексте окна, или использовать буферный имейдж.
PM ICQ Skype   Вверх
Курсант
Дата 1.1.2010, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

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



Про рисование вопрос к тому, что у меня расположение объектов систематизировано, и я по координатам щелчка мыши могу определить, по какому объекту щелкнули. А винда видимо будет искать какой дочерний эл-т получил то или иное событие, дочерний будет посылать сообщения своим контейнерам, и так далее.. Вот я и думаю, что может просто нарисовать..

Добавлено через 3 минуты и 51 секунду
Папа карло вспоминается, за нарисованным камином smile
PM ICQ Skype   Вверх
xvr
Дата 1.1.2010, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Курсант @ 1.1.2010,  11:48)
Спасибо за ответы smile с алгоритмами вроде определился, теперь еще пару вопросиков в надежде на ответ, т.К. Кроме мобильного и тетради с ручкой у меня никаких средств обработки и хранения информации нет smile 

Настоятельно рекомендую найти, хотя бы в виде книги  smile 
Цитата

1. С какими флагами нужно регистрировать класс окна, чтобы его было можно помещать на клиента, и рисовать на нем поведение. 
С любыми. А вот создавать сами окна (контролы) с стилем WS_CHILD
Цитата

2. Лучше рисовать поведение, или все таки пользоваться стандартными компонентами, которые уже кидать на свой. Хотя тут мне кажется уместнее смешанный вариант.. 
Win API не поддерживает понятия 'контрола', как такового - для него это все окна. Так что с 'киданием на свой' - будут большие проблемы. 'Кинуть' то контрол можно, но жить он будет своей жизнью. Максимум, что сделано для этого в Win API - это отсылка сообщений родительскому окну. Все остальное придется отписывать руками. (Добрая половина любого оконного framework'а как раз и посвещена организации взаимодействий между контролами)
Цитата

3. Как лучше делать - рисовать прямо на контексте окна, или использовать буферный имейдж.
Как угодно, целиком на ваше усмотрение (в зависимости от задачи)
Цитата

Про рисование вопрос к тому, что у меня расположение объектов систематизировано, и я по координатам щелчка мыши могу определить, по какому объекту щелкнули.
Это Windows определит сама
Цитата

А винда видимо будет искать какой дочерний эл-т получил то или иное событие, 
Неа. Отправит напрямую верхнему окну.
Цитата

дочерний будет посылать сообщения своим контейнерам,
А это уже личное дело того самого 'дочернего'
Цитата

Вот я и думаю, что может просто нарисовать..
Что надо сделать то? Может 'просто нарисовать' будет достаточно, а может и нет  smile 

PM MAIL   Вверх
Курсант
Дата 1.1.2010, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

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



Делать собираюсь гибрид treeview и listbox, с раскрывающимися группами, тремя столбцами для отображения количества подэлементов трех разных категорий в элементах, и в этих же столбцах, если в строке не элемент а группа, отображается количество подэлементов всех элементов группы. Еще и подсветка будет при наведении мыши как в опера мини.. 
PM ICQ Skype   Вверх
GremlinProg
Дата 1.1.2010, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Цитата(Курсант @  1.1.2010,  17:52 Найти цитируемый пост)
Делать собираюсь гибрид treeview и listbox, с раскрывающимися группами, тремя столбцами для отображения количества подэлементов трех разных категорий в элементах, и в этих же столбцах, если в строке не элемент а группа, отображается количество подэлементов всех элементов группы. Еще и подсветка будет при наведении мыши как в опера мини.. 

не понятно, начиная с момента про столбцы, по-моему, это лучше нарисовать


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Курсант
Дата 1.1.2010, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

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



Типа такого, в столбцах численные значения.

Присоединённый файл ( Кол-во скачиваний: 21 )
Присоединённый файл  IMG0218A.jpg 498,51 Kb
PM ICQ Skype   Вверх
xvr
Дата 1.1.2010, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Курсант @ 1.1.2010,  21:01)
Типа такого, в столбцах численные значения.

Это относительно легко делается из самого treeview (через его OwnerDraw)
Я видел несколько реализаций этого в рамках VCL (для Delphi). Идеи можно взять оттуда

PM MAIL   Вверх
GremlinProg
Дата 2.1.2010, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



на первый взгляд - это listview с owner-draw, т.к. от него больше элементов, в частности - колонки
да и саму древовидную структуру рисовать проще на listview, чем воспроизводить разметку колонок на treeview

вобщем - listview, причем где-то такое я уже видел, и почему-то мне представляется древняя 1c, или 5-я си, может из-за этих самых скруглений smile

кстати, про набросок: я не конкретно это имел ввиду, но получилось отлично, зачот!


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
xvr
Дата 2.1.2010, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(GremlinProg @ 2.1.2010,  00:52)
на первый взгляд - это listview с owner-draw, т.к. от него больше элементов, в частности - колонки
да и саму древовидную структуру рисовать проще на listview, чем воспроизводить разметку колонок на treeview

Рисовать дерево может и проще, а вот обслуживать его (раскрытие и схлопывание уровней и все, что с этим связанно) может и не проще.
Про колоночную структуру - согласен, на treeview ее делать непросто. Но ее можно и не делать - если можно обойтись без вертикальных линий, то все будет очень просто (из treeview). Если же без них никак - то из listview действительно получится проще

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.0592 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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