![]() |
|
|
![]()
|
|
| Shiirx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 1.12.2007 Репутация: нет Всего: нет |
Доброе время суток.
Такое вот дело у меня к вам, требуется, чтобы по таймеру менялась одна картинка Bitmap, на другую, как это можно сделать? т.е. должна получиться некая анимация... Требуется именно смена одной картинки другой, сделать видио не подходит, заранее огромное спасибо... |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
||||
|
||||
| Shiirx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 1.12.2007 Репутация: нет Всего: нет |
Не понятно, как заставить меняться их, т.е. что писать в обработчик таймера... Можно даже привести пример, с нажатием на кнопку, а в таймер сам уже как-нибудь засуну... ВЫручайте, очень нужна помощь... |
|||
|
||||
| mantissa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 23.10.2007 Репутация: 1 Всего: 1 |
Привет Все и Shiirx!
посмотрите какой функцией загружаеся одна картинка из ресурса (файла) и каким сообщением она вставляется в кнопку или окно при инициализации окна (диалога) и используйте те же 2 действия на таймере... если картинок много, то удобнее загружать сразу составленный список всех изображений одинакового размера и менять их ImageList_Draw(,,,,,) см Калверт Программирование в Windows в 21 день (день 19) с ув. BSD |
|||
|
||||
| Shiirx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 1.12.2007 Репутация: нет Всего: нет |
в файле test.rc, раздел Dialog: CONTROL 129,IDB_BITMAP1,"Static",SS_BITMAP | SS_CENTERIMAGE,0,0,202,175 Раздел BITMAP: IDB_BITMAP1 BITMAP "res\\bitmap1.bmp" и как я должен это всё соеденить? Добавлено через 1 минуту и 56 секунд К сожалению книги нет, в инете скачать тоже не нашёл где, если есть ссылка поделитесь.. |
|||
|
||||
| mantissa |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 23.10.2007 Репутация: 1 Всего: 1 |
Привет, Shiirx!
Раздел BITMAP: IDB_BITMAP1 BITMAP "res\\bitmap1.bmp" ++ ... IDB_BITMAP2 BITMAP "res\\bitmap2.bmp" ... IDB_BITMAPN BITMAP "res\\bitmapN.bmp" поиском по проекту можно найтить место, которое будет пользовать этот IDB_BITMAP1 и добавить туда же свои например:
и соответственно в нужном месте (той же процедуры) вставить например для кнопки IDC_btnTray:
|
||||
|
|||||
| Shiirx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 1.12.2007 Репутация: нет Всего: нет |
<b>Что-то я не нашёл такое место, что это за код? Что он делает и откуда он взялся?</b> <b>Как определить, нужное место и что это за кнопка такая?</b> |
|||
|
||||
| Shiirx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 1.12.2007 Репутация: нет Всего: нет |
|
|||
|
||||
| mantissa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 23.10.2007 Репутация: 1 Всего: 1 |
хм... не сразу распознал MFC и предлагал функции API.
в MFC вроде все еще проще д.б., но поскольку с MFC работал мало и методов изучил тоже мало, то могу предложить только следующее: 1) копируем и подредактируем файлик "res\bitmap1.bmp", получаем "res\bitmap2.bmp" добавляем его в ресурсы любым способом и получаем Раздел BITMAP: IDB_BITMAP1 BITMAP "res\\bitmap1.bmp" IDB_BITMAP2 BITMAP "res\\bitmap2.bmp" 2) открываем диалог в редакторе ресурсов (тот который содержит выше указанное) размножаем окно или другим способом (не забывать присвоить ID IDB_BITMAP2=12009 в h-файле, если обычным копированием) получаем CONTROL 129,IDB_BITMAP1,"Static",SS_BITMAP | SS_CENTERIMAGE,0,0,202,175 CONTROL 12009,IDB_BITMAP2,"Static",SS_BITMAP | SS_CENTERIMAGE | NOT WS_VISIBLE,0,0,202,175 (ВНИМАНИЕ! все остальные там же, но невидимые) 3) в указанном обработчике кнопки или НА ТАЙМЕРЕ переключаем видимость этих окон методом: if (myOk) { GetDlgItem(IDB_BM2)->ShowWindow(SW_SHOW); GetDlgItem(IDB_BM3)->ShowWindow(SW_HIDE); } else { GetDlgItem(IDB_BM3)->ShowWindow(SW_SHOW); GetDlgItem(IDB_BM2)->ShowWindow(SW_HIDE); } myOk = !myOk; BOOL myOk; или счетчик времени тож придется добавить в класс окна Добавлено через 1 минуту и 34 секунды вау... сорри тама 1 и 2 а не 2 и 3 (копировал с теста, проверял не обману ли |
|||
|
||||
| Shiirx |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 1.12.2007 Репутация: нет Всего: нет |
Опять что-то не так :(
Делаю так: File-New->Project->MFC Application Удаляю, всё что есть на форме (две кнопки и надпись), добавляю BITMAP1 и BITMAP2, на форму бросаю: две штуки Picture Control (для BITMAP1 и BITMAP2). Добавляю кнопку: Button1 В первой указываю: - Center Image True - Type Bitmap - Image IDB_BITMAP1 (IDB_BITMAP2 - для 2-й картинки) - ID IDB_BITMAP1 (IDB_BITMAP2 - для 2-й картинки) - Visible True (False - для 2-й картинки) Во второй указываю: - Center Image True - Type Bitmap - Image IDB_BITMAP2 - ID IDB_BITMAP2 - Visible False Получаем Test.rc:
В обработку кнопки вписываю:
В итоге: Не работает! И ещё, чёт я не понял, куда я должен вписать:
??? Где, что не так сделал? Добавлено через 2 минуты и 53 секунды P.S. Что такое: - myOk - IDB_BM2 и IDB_BM1 Откуда они взялись??? |
||||||
|
|||||||
| zkv |
|
||||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
просто флаг чтобы контролировать последнее положение, определить нужно примерно так в классе диалога:
это будет правильнее идеологически. или можно сделать статиком, до определенного момента это тоже будет верно работать:
это ID статик-контролов на диалоге. Это сообщение отредактировал(а) zkv - 6.12.2007, 20:37 |
||||
|
|||||
| Shiirx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 1.12.2007 Репутация: нет Всего: нет |
Мой вариант (исправленный mantissa):
Откуда вы взяли: IDB_BM1??? Там же: IDB_BITMAP1 P.S. Всем огромное спасибо |
|||
|
||||
| Shiirx |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 1.12.2007 Репутация: нет Всего: нет |
Теперь надо из этого сделать анимацию, т.е. картинки должны меняться по таймеру:
Получается что-то вроде анимации из 2-х картинок, но мне надо сделать из Большего количества...
Код не работает, вернее вроде работает (мигает что-то) но картинка не меняется.. Может кто-нибудь, что-нибудь предложит? P.S. У меня они должны меняться каждую секнду |
||||
|
|||||
| mantissa |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 23.10.2007 Репутация: 1 Всего: 1 |
да конечно... виноват... у себя сократил BitMap до BM - это идентификаторы рисунков, их можно сделать любое (пока ресурсов хватит) кол-во
пущай их будет 8 нарисуем в любом редакторе 8 bmp-шек например на первой стрелки часов показывают 12 часов на второй половину второго на третьей - 3 часа и т.д ... в ресурсах заводим 10 картинок-control-ов, занимающих одно и то же место и с возрастающими по порядку номерами например: IDB_BM1=5001, IDB_BM2=5002,... 5008 т.е.: в файле resource.h (по умолчанию вроде так называется) будет
в файле имя.rc :
в классе диалога (или вообще приложения) заводим счетчик времени - например INT nTime = 0; (или обнуляем его в конструкторе диалога) в методе void CTestDlg::OnTimer(UINT nIDEvent) гасим одно окно с картинкой и показываем другое:
GetDlgItem(INT) - возвращает указатель на дочернее окно указанное идентификатором 'IDB_BMnnn', а мы пользуем метод любого окна ShowWindow а эти окна уже содержат загруженные из ресурсов картинки. Их при создании диалога загрузит метод OnCreate |
||||||
|
|||||||
| Shiirx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 1.12.2007 Репутация: нет Всего: нет |
И так...
Немного исправил код, и вот что получаем:
при нажатии на кнопку появляется сообщение: Unhandled exception at 0x0051c4ea in Test.exe: 0xC0000005: Access violation reading location 0x00000020. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |