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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> wanapi, Нужна срочная помошь с заданием 
:(
    Опции темы
Roum001
  Дата 24.12.2010, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток!
Есть проблема и срочно нужна помощ!
Задача: создать окно,на окне шар нарисован(с помощью bitmap) вы кликаем на нем мышкой и перетаскиваем куда-нть,после отпускания мыши круг падает до края окна и отскакивает обратно (типа анимация),скачет и постепенно останавливается. Подскажите как данное организовать с помошью чистого winapi. 
p.s. регистрацию окна можно не подсказывать. smile
PM MAIL   Вверх
Dreamer_0x01
Дата 24.12.2010, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



В общих словах - храним координаты шара в глобальной структуре.

Далее нам нужна функция, получающая отсчеты таймера. Она будет реализовывать изменение вертикальной координаты в соответствии со школьной формулой x = Xo + Vo*t + g*t*t, где переменные это соответственно начальное положение, начальная скорость, ускорение свободного падения и время в секундах.

По завершению отработки этой функции нужно посылать окну сообщение WM_PAINT. Там все просто - рисуете ваш шарик в соответствии с координатами.

Далее вам понадобится обработка сообщения нажатия левой кнопки мыши - в ней вы делаете следующее - 

1. Проверяете, попадает ли нажатие мыши внутрь нарисованного круга.
2. Если попадает, то ставите флаг(еще одну переменную), говорящий, что пользователь начала перетаскивание шара. В еще одну специальную переменную заносите координаты мыши, соответствующие началу движения.
3. Отключаете таймер, который генерирует отсчеты для функции падения.

В обработчике отпускания кнопки мыши вы сбрасываете переменную-флаг, говорящую о том, что идет процесс передвижения шара.

Ну а в обработчике MOUSEMOVE вы проверяете, выставлен ли ваш флаг, говорящий о том, что идет передвижение.
Если выставлен - вычисляете смещение координат мыши относительно координат, зафиксированных при запуске процесса перетаскивания, то есть нажатия на кнопку мыши. К координатам шара просто прибавляете это смещение и посылаете сообщение для перерисовки окна.

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


Это сообщение отредактировал(а) Dreamer_0x01 - 24.12.2010, 11:18


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0852 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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