Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Смена рисунка Bitmap, Смена рисунка Bitmap 
:(
    Опции темы
Shiirx
Дата 1.12.2007, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброе время суток.
Такое вот дело у меня к вам, требуется, чтобы по таймеру менялась одна картинка Bitmap, на другую, как это можно сделать? т.е. должна получиться некая анимация... Требуется именно смена одной картинки другой, сделать видио не подходит, заранее огромное спасибо...
PM MAIL WWW   Вверх
zkv
Дата 2.12.2007, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(Shiirx @  1.12.2007,  22:42 Найти цитируемый пост)
Такое вот дело у меня к вам, требуется, чтобы по таймеру менялась одна картинка Bitmap, на другую, как это можно сделать?

по таймеру меняй битмап, что тут еще добавишь.
Что именно не понятно?
PM MAIL   Вверх
Shiirx
Дата 2.12.2007, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(zkv @  2.12.2007,  15:17 Найти цитируемый пост)
по таймеру меняй битмап, что тут еще добавишь.
Что именно не понятно? 


Не понятно, как заставить меняться их, т.е. что писать в обработчик таймера...
Можно даже привести пример, с нажатием на кнопку, а в таймер сам уже как-нибудь засуну... ВЫручайте, очень нужна помощь... 
PM MAIL WWW   Вверх
mantissa
Дата 3.12.2007, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет Все и Shiirx!

посмотрите какой функцией загружаеся одна картинка из ресурса (файла) и каким сообщением она вставляется в кнопку или окно при инициализации окна (диалога)
и используйте те же 2 действия на таймере...

если картинок много, то удобнее загружать сразу составленный список всех изображений одинакового размера и менять их ImageList_Draw(,,,,,) см Калверт Программирование в Windows в 21 день (день 19)

с ув. BSD
PM MAIL   Вверх
Shiirx
Дата 3.12.2007, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(mantissa @  3.12.2007,  16:46 Найти цитируемый пост)
посмотрите какой функцией загружаеся одна картинка из ресурса (файла) и каким сообщением она вставляется в кнопку или окно при инициализации окна (диалога)

в файле test.rc, раздел Dialog:
CONTROL         129,IDB_BITMAP1,"Static",SS_BITMAP | SS_CENTERIMAGE,0,0,202,175
Раздел BITMAP:
IDB_BITMAP1             BITMAP                  "res\\bitmap1.bmp"

и как я должен это всё соеденить?  smile  smile

Добавлено через 1 минуту и 56 секунд
Цитата(mantissa @  3.12.2007,  16:46 Найти цитируемый пост)
 см Калверт Программирование в Windows в 21 день (день 19)

К сожалению книги нет, в инете скачать тоже не нашёл где, если есть ссылка поделитесь..  smile 
PM MAIL WWW   Вверх
mantissa
Дата 4.12.2007, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 
и добавить туда же свои например:
Код

      HINSTANCE hInstTmp = (HINSTANCE)(LONGLONG)GetWindowLong(hdlg, GWL_HINSTANCE);
      HBITMAP Bitmap = LoadBitmap(hInstTmp, (LPCSTR)IDB_BITMAP1);
// ++ Загрузку
      HBITMAP Bitmap2 = LoadBitmap(hInstTmp, (LPCSTR)IDB_BITMAP2);
...
      HBITMAP BitmapN = LoadBitmap(hInstTmp, (LPCSTR)IDB_BITMAPN);


и соответственно в нужном месте (той же процедуры) вставить например для кнопки IDC_btnTray:
Код

switch(nTime)
{
case 0:
SendMessage(GetDlgItem(hdlg, IDC_btnTray), BM_SETIMAGE, IMAGE_BITMAP, LPARAM(Bitmap));
case 1:
SendMessage(GetDlgItem(hdlg, IDC_btnTray), BM_SETIMAGE, IMAGE_BITMAP, LPARAM(Bitmap1));
...
case N:
SendMessage(GetDlgItem(hdlg, IDC_btnTray), BM_SETIMAGE, IMAGE_BITMAP, LPARAM(BitmapN));
}


PM MAIL   Вверх
Shiirx
Дата 4.12.2007, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(mantissa @  4.12.2007,  16:55 Найти цитируемый пост)
поиском по проекту можно найтить место, которое будет пользовать этот IDB_BITMAP1 
и добавить туда же свои например:

Код
HINSTANCE hInstTmp = (HINSTANCE)(LONGLONG)GetWindowLong(hdlg, GWL_HINSTANCE);
HBITMAP Bitmap = LoadBitmap(hInstTmp, (LPCSTR)IDB_BITMAP1);
// ++ Загрузку
HBITMAP Bitmap2 = LoadBitmap(hInstTmp, (LPCSTR)IDB_BITMAP2);
...
HBITMAP BitmapN = LoadBitmap(hInstTmp, (LPCSTR)IDB_BITMAPN);



<b>Что-то я не нашёл такое место, что это за код? Что он делает и откуда он взялся?</b>

Цитата(mantissa @  4.12.2007,  16:55 Найти цитируемый пост)
и соответственно в нужном месте (той же процедуры) вставить например для кнопки IDC_btnTray:

Код
switch(nTime)
{
case 0:
SendMessage(GetDlgItem(hdlg, IDC_btnTray), BM_SETIMAGE, IMAGE_BITMAP, LPARAM(Bitmap));
case 1:
SendMessage(GetDlgItem(hdlg, IDC_btnTray), BM_SETIMAGE, IMAGE_BITMAP, LPARAM(Bitmap1));
...
case N:
SendMessage(GetDlgItem(hdlg, IDC_btnTray), BM_SETIMAGE, IMAGE_BITMAP, LPARAM(BitmapN));
}



<b>Как определить, нужное место и что это за кнопка такая?</b>

PM MAIL WWW   Вверх
Shiirx
Дата 4.12.2007, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

void CMy3465Dlg::OnBnClickedButton1()
{
// что я сюда должен вписать, чтобы загрузилась картинка? :sample 
}

PM MAIL WWW   Вверх
mantissa
Дата 6.12.2007, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 (копировал с теста, проверял не обману ли smile )
PM MAIL   Вверх
Shiirx
Дата 6.12.2007, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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:

Код

//////////////////////////////////////////////////
//
// Dialog
//

CONTROL         130,IDB_BITMAP1,"Static",SS_BITMAP | SS_CENTERIMAGE,0,0,319,199
CONTROL         132,IDB_BITMAP2,"Static",SS_BITMAP | SS_CENTERIMAGE | NOT WS_VISIBLE,0,0,320,200
PUSHBUTTON      "Button1",IDC_BUTTON1,251,10,50,14

//////////////////////////////////////////////////
//
// Bitmap
//

IDB_BITMAP1             BITMAP                  "res\\Bit_1.bmp"
IDB_BITMAP2             BITMAP                  "res\\Bit_2.bmp"



В обработку кнопки вписываю:

Код

void CTestDlg::OnBnClickedButton1()
{
 if (myOk)
  {
    GetDlgItem(IDB_BM1)->ShowWindow(SW_SHOW);
    GetDlgItem(IDB_BM2)->ShowWindow(SW_HIDE);
  }
  else
  {
    GetDlgItem(IDB_BM2)->ShowWindow(SW_SHOW);
    GetDlgItem(IDB_BM1)->ShowWindow(SW_HIDE);
  }
  myOk = !myOk;
}



В итоге: Не работает! 
И ещё, чёт я не понял, куда я должен вписать:
Цитата(mantissa @  6.12.2007,  18:30 Найти цитируемый пост)
BOOL myOk; или счетчик времени тож  придется добавить в класс окна

???
Где, что не так сделал?

Добавлено через 2 минуты и 53 секунды
P.S.
Что такое:
- myOk
- IDB_BM2 и IDB_BM1
Откуда они взялись???
PM MAIL WWW   Вверх
zkv
Дата 6.12.2007, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(Shiirx @  6.12.2007,  20:28 Найти цитируемый пост)
- myOk

просто флаг чтобы контролировать последнее положение, определить нужно примерно так в классе диалога:
Код

bool myOk;

это будет правильнее идеологически.
или можно сделать статиком, до определенного момента это тоже будет верно работать:
Код

void CTestDlg::OnBnClickedButton1()
{
static bool myOk = true;
 if (myOk)
  {
    GetDlgItem(IDB_BM1)->ShowWindow(SW_SHOW);
    GetDlgItem(IDB_BM2)->ShowWindow(SW_HIDE);
  }
  else
  {
    GetDlgItem(IDB_BM2)->ShowWindow(SW_SHOW);
    GetDlgItem(IDB_BM1)->ShowWindow(SW_HIDE);
  }
  myOk = !myOk;
}


Цитата(Shiirx @  6.12.2007,  20:28 Найти цитируемый пост)
- IDB_BM2 и IDB_BM1

это ID статик-контролов на диалоге.

Это сообщение отредактировал(а) zkv - 6.12.2007, 20:37
PM MAIL   Вверх
Shiirx
Дата 7.12.2007, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Мой вариант (исправленный mantissa):

Код

void CTestDlg::OnBnClickedButton1()
{
    if (GetDlgItem(IDB_BITMAP2)->ShowWindow(SW_SHOW))
    {
    GetDlgItem(IDB_BITMAP2)->ShowWindow(SW_HIDE);
         GetDlgItem(IDB_BITMAP1)->ShowWindow(SW_SHOW);
    }
    else
    {
         GetDlgItem(IDB_BITMAP1)->ShowWindow(SW_HIDE);
          GetDlgItem(IDB_BITMAP2)->ShowWindow(SW_SHOW);
    }
}


Откуда вы взяли: IDB_BM1??? Там же: IDB_BITMAP1

P.S. Всем огромное спасибо smile Но это ещё не всё  smile 
PM MAIL WWW   Вверх
Shiirx
Дата 7.12.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Теперь надо из этого сделать анимацию, т.е. картинки должны меняться по таймеру:
Код

void CTestDlg::OnTimer(UINT nIDEvent)
{
    if (GetDlgItem(IDB_BITMAP1)->ShowWindow(SW_SHOW))
    {
    GetDlgItem(IDB_BITMAP1)->ShowWindow(SW_HIDE);
         GetDlgItem(IDB_BITMAP2)->ShowWindow(SW_SHOW);
    }
    else
    {
    GetDlgItem(IDB_BITMAP1)->ShowWindow(SW_SHOW);
         GetDlgItem(IDB_BITMAP2)->ShowWindow(SW_HIDE);
    }
}


Получается что-то вроде анимации из 2-х картинок, но мне надо сделать из Большего количества...

Код

void CTestDlg::OnTimer(UINT nIDEvent)
{
    if (GetDlgItem(IDB_BITMAP1)->ShowWindow(SW_SHOW))
    {
    GetDlgItem(IDB_BITMAP1)->ShowWindow(SW_HIDE);
    GetDlgItem(IDB_BITMAP3)->ShowWindow(SW_HIDE);
         GetDlgItem(IDB_BITMAP2)->ShowWindow(SW_SHOW);
    }
    if (GetDlgItem(IDB_BITMAP2)->ShowWindow(SW_SHOW))
    {
    GetDlgItem(IDB_BITMAP1)->ShowWindow(SW_SHOW);
         GetDlgItem(IDB_BITMAP2)->ShowWindow(SW_HIDE);
    GetDlgItem(IDB_BITMAP3)->ShowWindow(SW_SHOW);
    }
    if (GetDlgItem(IDB_BITMAP3)->ShowWindow(SW_SHOW))
    {
         GetDlgItem(IDB_BITMAP3)->ShowWindow(SW_HIDE);
    GetDlgItem(IDB_BITMAP2)->ShowWindow(SW_HIDE);
         GetDlgItem(IDB_BITMAP1)->ShowWindow(SW_SHOW);
    }
}


Код не работает, вернее вроде работает (мигает что-то) но картинка не меняется..
Может кто-нибудь, что-нибудь предложит?

P.S.
У меня они должны меняться каждую секнду
PM MAIL WWW   Вверх
mantissa
Дата 7.12.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



да конечно... виноват... у себя сократил BitMap до BM - это идентификаторы рисунков, их можно сделать любое (пока ресурсов хватит) кол-во
пущай их будет 8
нарисуем в любом редакторе 8 bmp-шек
например на первой стрелки часов показывают 12 часов
на второй половину второго
на третьей - 3 часа 
и т.д
...
в ресурсах заводим 10 картинок-control-ов, занимающих одно и то же место
и с возрастающими по порядку номерами например: IDB_BM1=5001,  IDB_BM2=5002,... 5008 т.е.:
в файле resource.h (по умолчанию вроде так называется) будет
Код

...
#define IDB_BM1   5001
#define IDB_BM2   5002
...
#define IDB_BM8   5008
#define ID_PIC1     501
...
#define ID_PIC8     508
...

в файле имя.rc  :
Код

//////////////////////////////////////////////////
// Dialog
CONTROL         ID_PIC1, IDB_BM1,"Static",SS_BITMAP | SS_CENTERIMAGE,0,0,320,200
CONTROL         ID_PIC2, IDB_BM2,"Static",SS_BITMAP | SS_CENTERIMAGE | NOT WS_VISIBLE,0,0,320,200
...
CONTROL         ID_PIC8, IDB_BM8,"Static",SS_BITMAP | SS_CENTERIMAGE | NOT WS_VISIBLE,0,0,320,200
PUSHBUTTON      "Button1",IDC_BUTTON1,251,10,50,14
//////////////////////////////////////////////////
// Bitmap
ID_PIC1             BITMAP                  "res\\pic_1.bmp"
ID_PIC2             BITMAP                  "res\\pic_2.bmp"
...
ID_PIC8             BITMAP                  "res\\pic_8.bmp"


в классе диалога (или вообще приложения) заводим счетчик времени - например 
INT nTime = 0; (или обнуляем его в конструкторе диалога) 

в методе void CTestDlg::OnTimer(UINT nIDEvent) гасим одно окно с картинкой и показываем другое:
Код

...
    GetDlgItem(IDB_BM1+nTime )->ShowWindow(SW_HIDE);
    nTime ++;
    if (nTime > 7) nTime = 0;
    GetDlgItem(IDB_BM1+nTime )->ShowWindow(SW_SHOW);
...

GetDlgItem(INT) - возвращает указатель на дочернее окно указанное идентификатором 'IDB_BMnnn', а мы пользуем метод любого окна ShowWindow
а эти окна уже содержат загруженные из ресурсов картинки. Их при создании диалога загрузит метод OnCreate


PM MAIL   Вверх
Shiirx
Дата 7.12.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



И так...
Немного исправил код, и вот что получаем:

Код

void CTestDlg::OnTimer(UINT nIDEvent)
{
static    int nTime = 0;
GetDlgItem(IDB_BITMAP1+nTime )->ShowWindow(SW_SHOW);
nTime++;
if (nTime > 3) nTime = 0;
GetDlgItem(IDB_BITMAP1+nTime )->ShowWindow(SW_HIDE);
}


при нажатии на кнопку появляется сообщение:

Unhandled exception at 0x0051c4ea in Test.exe: 0xC0000005: Access violation reading location 0x00000020.
PM MAIL WWW   Вверх
Shiirx
Дата 7.12.2007, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ошибка вызвана:
Код

(IDB_BITMAP1+nTime)

Отсюда вопрос, как тогда менять картинки?
PM MAIL WWW   Вверх
Shiirx
Дата 8.12.2007, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ВОт так написал:

Код

void CTestDlg::OnBnClickedButton2()
{
int i=IDB_BITMAP1;
static int z=1;
{
GetDlgItem(i+z)->ShowWindow(SW_HIDE);
GetDlgItem(i+z)->ShowWindow(SW_SHOW);
}
}

Так всё нормально, картинка меняется и всё хорошо, но стоит изменить:
IDB_BITMAP1 например на IDB_BITMAP2
или
z=1 на z=2; (числа могут быть другие у меня 5 картинок, как сразу ошибка выскакивает при нажатии на кнопку)
Причина не понятна...  smile  smile 
Легче родить, чем этот бред написать....
PM MAIL WWW   Вверх
mantissa
Дата 10.12.2007, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



стоп-стоп...
причем здесь кнопка??
 кнопки больше нету! или пущай она делает все, что угодно, но только не трогает наши BITMAPы!
Да и какой смысл прятать и показывать одну и ту же картинку.
Что там i+z, что сям... эт точно уже бред

и вообще.... у нас теперича ТАЙМЕР!!!
Система будет вызывать код         void CTestDlg::OnTimer(UINT nIDEvent) {...} каждые nnn милисек, как задано при инициализации таймера

не вижу в студии кода resource.h и кода диалога из файла ресурсов
тама д.б. инфа об 0, 1, 2 и 3 картинках
PM MAIL   Вверх
Shiirx
Дата 10.12.2007, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот, до чего за выходные дошло:

Код

void CTestDlg::OnBnClickedButton1()
{
    static int b=0;
    if(b==0)
        {
        b+=1;
        SetTimer(1, 500, NULL);
        }
    else
        {
        b=0;
        KillTimer(1);
        }
    b=0;
    if(b==0)
        {
        b+=1;
        SetTimer(2, 1000, NULL);
        }
    else
        {
        b=0;
        KillTimer(2);
        }
    b=0;
    if(b==0)
        {
        b+=1;
        SetTimer(3, 1500, NULL);
        }
    else
        {
        b=0;
        KillTimer(3);
        }
    b=0;
    if(b==0)
        {
        b+=1;
        SetTimer(4, 2000, NULL);
        }
    else
        {
        b=0;
        KillTimer(4);
        }
    b=0;
    if(b==0)
        {
        b+=1;
        SetTimer(5, 2500, NULL);
        }
    else
        {
        b=0;
        KillTimer(5);
        }
}
void CTestDlg::OnTimer(UINT nIDEvent)
{
switch (nIDEvent)
{
case 1: GetDlgItem(IDB_BITMAP1)->ShowWindow(SW_HIDE),
GetDlgItem(IDB_BITMAP2)->ShowWindow(SW_SHOW); break;

case 2: GetDlgItem(IDB_BITMAP2)->ShowWindow(SW_HIDE),
GetDlgItem(IDB_BITMAP3)->ShowWindow(SW_SHOW); break;

case 3: GetDlgItem(IDB_BITMAP3)->ShowWindow(SW_HIDE),
GetDlgItem(IDB_BITMAP4)->ShowWindow(SW_SHOW); break;

case 4: GetDlgItem(IDB_BITMAP4)->ShowWindow(SW_HIDE),
GetDlgItem(IDB_BITMAP5)->ShowWindow(SW_SHOW); break;

case 5: GetDlgItem(IDB_BITMAP5)->ShowWindow(SW_HIDE),
GetDlgItem(IDB_BITMAP1)->ShowWindow(SW_SHOW); break;

case 6: GetDlgItem(IDB_BITMAP6)->ShowWindow(SW_HIDE),
GetDlgItem(IDB_BITMAP7)->ShowWindow(SW_SHOW); break;
}
}


Согласитесь, что код не очень, вернее таймер, как бы сделать так, чтобы всё в одном было? smile 
PM MAIL WWW   Вверх
mantissa
Дата 11.12.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



мда.... бардак...
у меня намного проще и компактнее...
разбирайтесь:
(архив прилагается)

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  test_2.rar 38,38 Kb
PM MAIL   Вверх
Shiirx
Дата 19.12.2007, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот какой вопрос:
Я для каждой отдельной картинки создаю свой "Picture Control", а можно как-нибудь всё в одном сделать, а то у маня анимация получается приблизительно из 100 картинок, так что...

Это сообщение отредактировал(а) zkv - 19.12.2007, 14:04
PM MAIL WWW   Вверх
KoliaMor
Дата 20.12.2007, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Код не работает, вернее вроде работает (мигает что-то) но картинка не меняется..
Может кто-нибудь, что-нибудь предложит?


Ясен пень ...

НАДА писать

Код


  if (GetDlgItem(IDB_BITMAP1)->ShowWindow(SW_SHOW))
    {
      ....
    }
 else if (GetDlgItem(IDB_BITMAP2)->ShowWindow(SW_SHOW))
    {
      ....
    } else if ...
 ......
 

 smile 

PM MAIL   Вверх
mantissa
Дата 20.12.2007, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Shiirx @  19.12.2007,  14:00 Найти цитируемый пост)
100 картинок, так что...

не вижу принципиальной разницы.... 
сэкономить можно только на 100 строчках в файле 'имя.rc'
в ресурсы все равно нужно пихать 100 рисунков 
а в таймере что так 3 строки писать, что эдак.
если хотите сэкономить на rc, 
1) заведите один контрол с первым рисунком
2) считайте коордионаты и размер этого контрола на инициализации диалога в статич.перем. RECT 
3) а на таймере придется генерировать новое имя ресурса картинки, загружать его из ресурса, разрушать предыдущее окно и создавать динамически новое и заполнять его изображением  

PM MAIL   Вверх
Shiirx
Дата 22.12.2007, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

mantissa
мда.... бардак...
у меня намного проще и компактнее...
разбирайтесь:
(архив прилагается)


Чёт не разобрался... ((( А в понедельник уже сдавать надо ((
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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