![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| ButtonOFF |
|
||||||
|
улетевший ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 16.11.2009 Репутация: нет Всего: нет |
Делаю так, перетаскивается рывками и криво
А окно у меня без заголовка и рамки ... кроме как рабочей области нет ничего
WM_NCHITTEST не предлагать, с таким кодом перетаскивается конечно отлично, НО не работают "WM_BUTTON-что-нибудь"
Желательно подправить первый вариант, кто делал помогите плз |
||||||
|
|||||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| ButtonOFF |
|
|||
|
улетевший ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 16.11.2009 Репутация: нет Всего: нет |
Dem_max, Спасибо работает, но почти так же как и у меня. Когда я щелкаю и только начинаю тащить окно, оно резко срывается левым верхним углом под мышку...
|
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| ButtonOFF |
|
|||
|
улетевший ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 16.11.2009 Репутация: нет Всего: нет |
Dem_max, Вообще запутался, так оно у меня не двигается вообще, в общем что-то тут с математикой, поидее берем позицию курсора, потом как-нибуть ищем дельту перемещения, и уже смещаем угол окна на эту дэльту... а это еще не самое сложное
|
|||
|
||||
| Ne1tr1n0 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 1.3.2009 Репутация: нет Всего: 8 |
А что-нить типа такого не пойдет?
|
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
Все делается проще:
это всё! то есть, больше ничё не недо. код рабочий, взят из старого проекта. делал когда-то винамп-подобный интерфейс.. |
|||
|
||||
| Akira |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 26.3.2012 Репутация: нет Всего: нет |
volatile
Забыл ReleaseCapture() в некоторых приложениях без этой функи может быть ахтунг, а так сам таким пользуюсь только в место константы SC_MOVE + 2. нагляднее но не принципиально. |
|||
|
||||
| Dem_max |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Ну в последнем приведенном мной коде смысл такой. Правда у меня случай когда неклиентской области совсем нету, есть только клиентская.
Допустим у нас размер окна 100х100, мы ткнули мышкой в центр окна и хотим двигать. Так вот тут при нажатии левой кнопки мыши, узнаем положение курсора в клиентской области внутри окна. Получается для нашего примера 50х50 положение курсора.
При движении курсора, узнаем его позицию глобальную на рабочем столе. допустим курсор глобально в положении 500х500. Итоговое положение окна становится начальные координаты х = y = 500 - 50 = 450
Устанавливаем новое положение окна
Двигаем окно на позицию MoveWindow(m_hWnd,450, 450, 100, 100, FALSE); При этом окно находится на позиции 450х450, а курсор на позиции 500х500, так вот при движении курсора, положение окна будет изменяться, а положение курсора в окне будет постоянно в середине окна для нашего примера. Пример работы тут ПРИМЕР Добавлено @ 05:00
Это не документированная функция, не стоит ее использовать. Это сообщение отредактировал(а) Dem_max - 7.4.2012, 05:06 -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
||||||||
|
|||||||||
| Akira |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 26.3.2012 Репутация: нет Всего: нет |
Dem_max
SendMessage(hWnd, WM_SYSCOMMAND, 0xF012, 0); Это не документированная функция, не стоит ее использовать. С каких пор? Функа подробно описана в MSDN, константа определена в каком то хидере, сам мелкософт использует этот способ. |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Можно узнать в каком хидере объявлена константа 0xF012 ????
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
Возможно, но эта фиговина работает на всех мастдаях начиная с 95 и вплоть до самых последних новаций от м$. Чего, кстати нельзя сказать о целой куче вполне документированных функций, поддержка которых прекратилась. Так что ... Добавлено через 2 минуты и 12 секунд здесь кое-что есть |
|||
|
||||
| Akira |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 26.3.2012 Репутация: нет Всего: нет |
Dem_max
>> Можно узнать в каком хидере объявлена константа 0xF012 ???? Каюсь, постоянно забываю что исходники NT в поставку студии не входят. volatile Способ норм. это же не ядерный андок и то там по большей части смена адресов, а так кочует из версии к версии и это способ давался в пере книг от мелкософт пресс (напамять не помню ибо их у них чуть меньше чем ***). |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
У всех приведенных методов кроме моего есть один недостаток, окно нельзя переместить вверх за границу экрана !!! (это можно сделать влево, вправо, вниз), если тебе конечно этого не нужно, то можно воспользоваться простым методом.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
что за ересь? какие еще WM_BUTTON не работают? WM_xBUTTONxxx? они не не работают, они просто переходят в другой диапазон сообщений: WM_NCxBUTTONxxx, т.к. WM_xBUTTONxxx привязаны исключительно к HTCLIENT'у чтобы при этом отрабатывали WM_xBUTTONxxx надо доделать начатое с WM_NCHITTEST, т.е. пометить HTCLIENT'ом те области, над которыми эти WM_xBUTTONxxx должны проходить -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]()
|
| Правила форума "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. |