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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать TSplitter 
V
    Опции темы
586
Дата 23.10.2006, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Как реализовать TSplitter на WinApi

Присоединённый файл ( Кол-во скачиваний: 43 )
Присоединённый файл  1.JPG 6,13 Kb
PM   Вверх
anwe
Дата 23.10.2006, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну, как?
Конечно было бы красивее, если бы было 2 Мемо. Ну да ладно.

1. По нажатию клавиши мыши и получении сообщения WM_LBUTTONDOWN выполняешь функцию SetCapture. Понятно, чтоб можно было двигать и на "террритории" Мемо. Здесь же поднимаешь тобой определенный флаг, про который чуть ниже.
2. В ответ на WM_MOUSEMOVE просто-напросто вызываешь написаннубю тобой функцию.
3. И вот здесь проверяешь: поднят ли флаг. Да - выполняешь функцию.
  Сама эта функция берет по результату GetCursorPos координаты мишы, переводит их в клиентские через ScreenToClient и двигает твое Мемо посредством MoveWindow.
Только! Из структуры РRECT выбираешь границы окна (основного) и следишь, чтобы не выйти за его пределы.
4. В ответ на WM_LBUTTONUP освобождаешь мышь ReleaseCapture и сбрасываешь свой флаг.

Да, и для красоты, на форме сделай курсор стрелкой: IDC_SIZEWE.  smile 
Еще есть "но". Скорее не "но", а требующее внимание: отслеживание изменения размеров основного окна. Также лучше в отдельной процедурке.
PM MAIL   Вверх
Earnest
Дата 24.10.2006, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Дополнение: еще надо бы обрабатывать WM_CAPTURECHANGED.


--------------------
...
PM   Вверх
anwe
Дата 24.10.2006, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Не обязательно.
PM MAIL   Вверх
Earnest
Дата 24.10.2006, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



... иначе будешь иметь всякие эффекты, если, скажем, переключишься на другое приложение, не отпустив мышь... 
Это, конечно, не фатально, но грязненько.


--------------------
...
PM   Вверх
anwe
Дата 24.10.2006, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Но если только в этом случае... smile 
А для работы только с твоей же программой этого не надо.
PM MAIL   Вверх
Earnest
Дата 24.10.2006, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Это ты пользователям своим объясни: сюда тыкать, а сюда - нет. smile 
На самом деле, бесконтрольная потеря Capture происходит достаточно часто. Причем не тогда, когда конкретно отлаживаешь данную фичу, а в самые разные и неподходящие моменты. Причем повторить не всегда удается. Чтобы надежно защититься от такой грязи, нужно просто поставить обработчик WM_CAPTURECHANGED и аккуратно обработать отмену "такскания".  


--------------------
...
PM   Вверх
anwe
Дата 25.10.2006, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В общем, согласен.
Цитата
Это ты пользователям своим объясни: сюда тыкать, а сюда - нет
 И это верно.
Думаю, дальше не пойдем, а то это уже будет оффтоп.
PM MAIL   Вверх
aggressorus
Дата 2.11.2006, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Слей WTL отсюда
WTL 7.1
Там есть шаблон CSplitterImpl в atlsplit.h. Немного переделать и у тебя классный сплиттер. 
Удачи.


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


Новичок



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

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



можно написать собственный splitter, двигать дочерние окно по родителю 

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


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

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