![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
||||
|
||||
| anwe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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. Еще есть "но". Скорее не "но", а требующее внимание: отслеживание изменения размеров основного окна. Также лучше в отдельной процедурке. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Дополнение: еще надо бы обрабатывать WM_CAPTURECHANGED.
-------------------- ... |
|||
|
||||
| anwe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
Не обязательно.
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
... иначе будешь иметь всякие эффекты, если, скажем, переключишься на другое приложение, не отпустив мышь...
Это, конечно, не фатально, но грязненько. -------------------- ... |
|||
|
||||
| anwe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
Но если только в этом случае...
А для работы только с твоей же программой этого не надо. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Это ты пользователям своим объясни: сюда тыкать, а сюда - нет.
На самом деле, бесконтрольная потеря Capture происходит достаточно часто. Причем не тогда, когда конкретно отлаживаешь данную фичу, а в самые разные и неподходящие моменты. Причем повторить не всегда удается. Чтобы надежно защититься от такой грязи, нужно просто поставить обработчик WM_CAPTURECHANGED и аккуратно обработать отмену "такскания". -------------------- ... |
|||
|
||||
| anwe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
В общем, согласен.
Думаю, дальше не пойдем, а то это уже будет оффтоп. |
|||
|
||||
| aggressorus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 2.11.2006 Репутация: нет Всего: нет |
Слей WTL отсюда
WTL 7.1 Там есть шаблон CSplitterImpl в atlsplit.h. Немного переделать и у тебя классный сплиттер. Удачи. |
|||
|
||||
| kazakov1551983 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
можно написать собственный splitter, двигать дочерние окно по родителю
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |