Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [WinAPI, DirectX] Воспроизведение музыки 
:(
    Опции темы
Ferrisgeneral
  Дата 27.9.2010, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



написал часть файлика по воспроизведению музыки.
не знаю как сделать и поправить пару мест:
- при повторном нажатии кнопки Play после паузы (во время воспроизведения нажать кнрпку Play) запускается еще один экземляр ffdshow audio decoder (можно наблюдать в трее), но не понимаю почему (вродебы нигде ничего не делаю)
- как сделать, чтобы поменять текст на кнопочке (в моем случае это кнопочка Play, текст на которой надо менять на Pause и обратно)
- как сделать регулятор громкости на основе добавленного в диалоговое окно Trackbar (SlideBar)

проектик:
http://www.sendspace.com/file/7rl5pr
PM MAIL   Вверх
Ferrisgeneral
Дата 27.9.2010, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



второй вопросец (про смену текста на кнопочку) уже решил.
первый вопросец тоже сам собой решился.
-----

помогите советом, как сделать регулятор громкости ... не могу понять, толи у меня не получается его настроить, толи не получается получить правильно значение от TrackBar в WM_HSCROLL

Это сообщение отредактировал(а) Ferrisgeneral - 29.9.2010, 19:03
PM MAIL   Вверх
Ferrisgeneral
Дата 30.9.2010, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Немного доработал плеер, и поисправлял баги (хотя парачка еще осталась)

Добавил приглушение музыки, но никак не получается всетаки сделать регулятор громкости, точнее видимо не получается обрабатывать сообщения от TrackBar. Посоветуйте чего нибудь дельное.


обновленный проектик:
http://www.sendspace.com/file/bxu9u0
PM MAIL   Вверх
BorisVorontsov
Дата 10.10.2010, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

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



DirectShow не относится к DirectX еще с 2005 года, это теперь системная технология и должна обсуждаться в разделе по системному программированию
Что же касается твоего последнего вопроса, то сообщения от TrackBar'а у тебя обрабатываются, а точнее, сообщение WM_HSCROLL
Но внутри вместо этого
Код

g_pDSBasicAudio->put_Volume(-500);


Должна быть проверка кода, который TB передает в нижнем слове wParam, и должно быть получение значения TB из верхнего слова wParam. Значение передается вместе с кодами TB_THUMBPOSITION и TB_THUMBTRACK



--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
Ferrisgeneral
Дата 12.10.2010, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



да, эти сообщения ловит, но получить позицию всеравно не получается (res всегда = 0)

Код

//.......

LRESULT res = 0;
HWND hwndDlg;    //диологовое окно
HWND hWndsb;     //trackbar

//.......

BOOL CALLBACK DlgProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam) 

    switch (message) 
    {
        HANDLE_MSG(hwndDlg, WM_COMMAND, My_OnCommand);

        case WM_INITDIALOG:
            {
                InitCommonControls();

                SendMessage(hWndsb, TBM_SETRANGE, (WPARAM)TRUE, (LPARAM)MAKELONG(0, 100)); 
                SendMessage(hWndsb, TBM_SETPAGESIZE, (WPARAM)0, (LPARAM)20); 
                SendMessage(hWndsb, TBM_SETSEL, (WPARAM)FALSE, (LPARAM)MAKELONG(0, 100));
                SendMessage(hWndsb, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)0);
            }
            break;

        case WM_HSCROLL:
            {
                switch (LOWORD(wParam))
                { 
                    case TB_THUMBTRACK:    //при нажатии левой кнопки на рычажке
                        {
                            res = SendMessage(hWndsb, TBM_GETPOS, 0, 0);
                        }
                        break;

                    case TB_THUMBPOSITION:    //при отпускании левой кнопки мыши с рычажка
                        {
                            //
                        }
                        break;

                    case TB_PAGEDOWN:    //клик по линии справа от рычажка
                        {
                            //
                        }
                        break;

                    case TB_PAGEUP:    //клик по линии слева от рычажка
                        {
                            //
                        }
                        break;


                    default: 
                        break; 
                } 

            }
            break;

        //.......


    }
    return TRUE;
}


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


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

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



Цитата(Ferrisgeneral @  12.10.2010,  13:08 Найти цитируемый пост)
но получить позицию всеравно не получается

Цитата(BorisVorontsov @  10.10.2010,  22:10 Найти цитируемый пост)
и должно быть получение значения TB из верхнего слова wParam. Значение передается вместе с кодами TB_THUMBPOSITION и TB_THUMBTRACK

По поводу TBM_GETPOS, подозреваю, что у тебя невалидный хендл


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
Ferrisgeneral
Дата 13.10.2010, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



handle и правда не валидный был.

но теперь другая напасть, res всегда теперь равно очень большому числу (т.е. ранее сделанные настройки диапазона trackbar в WM_INITDIALOG игнорируются).
PM MAIL   Вверх
BorisVorontsov
Дата 13.10.2010, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

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



Во-первых, InitCommonControls(); в процедуре диалога с общими элементами вызывать нельзя. Эта функция регистрирует в процессе классы, которые уже должны быть зарегистрированы при создании диалога
Во-вторых, почему ты упрямо игнорируешь позицию TB, которая передается в wParam?


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
Ferrisgeneral
Дата 15.10.2010, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а где тогда должен находиться InitCommonControls(); ?
мне кажется что он вообще сдесь не нужен.

я может и не игнорировал позицию ТВ, если бы понимал что нужно сделать.  smile 
PM MAIL   Вверх
BorisVorontsov
Дата 17.10.2010, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

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



Цитата(Ferrisgeneral @  15.10.2010,  14:12 Найти цитируемый пост)
а где тогда должен находиться InitCommonControls(); ?

В WinMain, или до вызова CreateDialog/DialogBox


Цитата(Ferrisgeneral @  15.10.2010,  14:12 Найти цитируемый пост)
я может и не игнорировал позицию ТВ, если бы понимал что нужно сделать

Гм. Нужно прочесть позицию из верхнего слова wParam. Для этого существует макрос HIWORD


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

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


 




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


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

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