Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > avi-файл в ресурсах


Автор: Athlon 20.6.2006, 16:43
Хочу сделать в своем приложении такую фитчу - когда начинаются длительные вычисления показывать юзеру ролик. Для этого создаю отдельное диалоговое окно с CAnimateCtrl, но располагать ролик в отдельном файле не хочу(юзер удалит или еще какая пакость случится), поэтому добавил ролик в ресурсы следующим образом:  пункт меню Insert -> Resource,  кнопка Import,  в появившемся диалоговом окне выбораю файла для импорта, в окне типа файлов выбратю Все файлы. Потом пытаюсь запустить ролик следующим образом:
Код

if(m_anime.Open(MAKEINTRESOURCE(IDR_DOWNLOAD)))
{
    if(!m_anime.Play(0, (UINT)-1, (UINT)-1)) AfxMessageBox("play error");
}
else AfxMessageBox("open error");

В чем ошибка??

P.S. Все это я вытворяю в MS VC++ 6.0 

Автор: Coocky 20.6.2006, 17:13
Цитата(Athlon @  20.6.2006,  16:43 Найти цитируемый пост)
поэтому добавил ролик в ресурсы следующим образом:  пункт меню Insert -> Resource,  кнопка Import,  в появившемся диалоговом окне выбораю файла для импорта, в окне типа файлов выбратю Все файлы

 smile 
Что бы засунуть файл в ресурсы (например *.wav или *.exe) нужно включить какой-либо файл в ресурсы, это добавить в файл описания ресурсов (*.rc) строку

Код

ResurceName ТИП_РЕСУРСА "Имя файла"

Здесь:
ResurceName - уникальное имя ресурса, им мы будем пользоваться, когда будем загружать ресурс. В принципе здесь может стоять и числовой индентификатор ресурса (можно и определенный через #define, но тогда необходимо, чтобы из того места кода, где мы будем грузить ресурс, это определение тоже было видно; в таком случае обычно эти определения выносятся в заголовочный файл ресурсов- для них (файлов) принято использовать расширение *.rh).
ТИП_РЕСУРСА - идентификатор типа ресурса. RCDATA - специальный тип для бинарных ресурсов (грубо говоря, массив байт лежит как есть). *.wav тоже можно объявить как RCDATA, но принято его "регистрировать" как WAVE.
"Имя файла" - полное имя подключаемого файла вместе с расширением (директории разделяются одиночным '\').

 

Автор: Athlon 20.6.2006, 18:11
Coocky, если я тебя правильно понял, то все что мне надо сделать это изменить одну строчку в файле ресурсов. В файле ресурсов была такая строчка:
Код

IDR_DOWNLOAD            VIDEO   DISCARDABLE     "res\\Download.avi"

я меняю ее на следующую:
Код

IDR_DOWNLOAD            RCDATA   DISCARDABLE     "res\\Download.avi"

Эффект нулевой - все также open выдает ошибку. Я что-то не понял в чем соль. 

Автор: Earnest 21.6.2006, 06:59
Смотрим код CAnimateCtrl::Open.
Видим:
Код

...
::AfxFindResourceHandle(lpszName, _T("AVI")), (LPARAM)lpszName); 
...

Какой отсюда вывод? Правильно, MFC ожидает, что тип ресурса называется "AVI"...
В MSDN тоже есть эта информация, если поискать:

Цитата(из описания ACM_OPEN)

lpszName
Pointer to a buffer that contains the path of the AVI file or the name of an AVI resource. 
...
An AVI resource must have the "AVI" type. 
...
 

Автор: Coocky 21.6.2006, 11:56
Цитата

Я что-то не понял в чем соль

Cушай,земляк,не морочь голову.! Тебе ж на пальцах обьяснили (мне б кто так рассказывал! smile )
Вот тебе пример. Все в ресурсах, все работает!
VC++ 7.1 

Автор: Athlon 21.6.2006, 12:59
Вот теперь все кристально чисто, понятно и работает. Спасибо за объянения, признаю свою ошибку -  в MSDN поверхностно просмотрел. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)