Приклад програми Windows

Пропонований нижче приклад спеціально зроблений простим Я не став займатися розробкою витонченого графічного інтерфейсу, замість цього я підготував просте консольний додаток Його можна запускати з вікна MS DOS і використовувати для відтворення довільного числа файлів (впакетномурежимі) або запустити з-під Windows (в інтерактивному режимі)

B інтерактивному режимі використовується стандартна діалогова панель, за допомогою якої ви можете вибрати файл для програвання B пакетному режимі відтворюються файли, зазначені в командному рядку

Лістинг 64 Програма winmaincpp

#include &ltfstream&gt

#include &quotaudioh&quot

#include &quotopenh&quot

#include &quotaplayerh&quot

#include &quotwinplayrh&quot

#include &ltcommdlgh&gt

#include &ltwinbaseh&gt

#include &ltcrtdbgh&gt

#include &ltcassert&gt

int main(int argc, char **argv) {

/ / Для проведення тестів можна змонтувати кілька файлів,

/ / Знявши з цих рядків коментар і змінивши їх:

// Batch(&quotC:\\samples\\**&quot)

// exit(0)

if (argc == 1) Interactive()

else {

while (–argc) Batch(*++argv)

}

return 0

}

Зауважимо, що розрізнити, в якому режимі запущена програма, дуже просто: якщо в командному рядку немає аргументів, значить, програма запущена в інтерактивному режимі Робота в інтерактивному режимі організована шляхом повторюваних викликів методу GetOpenFileName, за допомогою якого у користувача запитуються імена файлів

Лістинг 65 Відтворення файлів під Windows в інтерактивному режимі

void Interactive() {

while (1) { OPENFILENAME ofn

char fileName[512] = &quot" memset(&ampofn,0,sizeof(ofn)) ofnlStructSize = sizeof(OPENFILENAME) ofnlpstrFile = fileName

ofnlpstrTitle = &quotPlay Sound File"

ofnnMaxFile =      512

if (GetOpenFileName (& ofn)) / / Відкидаємо діалог

PlayFile(fileName)

else return

}

}

Робота в пакетному режимі дещо складніше B Windows, як і в MS-DOS, обробка групових символів повинна бути реалізована безпосередньо в додатку Відібрати всі файли, відповідні заданим зразком, вам допоможуть системні функції FindFirstFile, FindNextFile і FindClose

Лістинг 66 Відтворення файлів під Windows

в неінтерактивному режимі

void Batch(char *filePattern) { WIN32_FIND_DATA fileData bool finished = false

HANDLE hSearch = FindFirstFile(filePattern,&ampfileData)

if (hSearch == INVALID_HANDLE_VALUE) {

cerr &lt&lt &quotCant find &quot &lt&lt filePattern &lt&lt &quot\n"

finished = true

}

while (finished) {

/ / Пропускаємо директорії, в особливості .” і ..”.

if ((fileDatadwFileAttributes &amp FILE_ATTRIBUTE_DIRECTORY)) {

char fileName[2048]

strcpy(fileName,filePattern)

char *p=fileName + strlen(fileName) 1

while ((p &gt fileName) &amp&amp (*p = &quotW&quot) &amp&amp (*p = &quot/&quot))

p – strcpy (р +1, fileDatacFileName) PlayFile (fileName)

}

finished = FindNextFile(hSearch,&ampfileData)

}

FindClose(hSearch)

}

Безпосередньо для відтворення файлу з обох вищевказаних функцій викликається функція PlayFile Зверніть увагу на те, що вхідний файл відкривається з використанням прапора ios :: binary Це необхідно для правильної обробки двійкових файлів, до яких відносяться і файли з записом звуку

Лістинг 67 Відтворення окремого файлу-під Windows

void PlayFile(char *fileName) {

/ / Повідомляємо імя файлу

cerr &lt&lt &quotFile: &quot &lt&lt fileName &lt&lt &quot\n" ifstream input(fileName,ios::in|ios::binary) if (inputis_open()) {

/ / He вдалося відкрити файл <ім'я файлу>

cerr &lt&lt &quotCouldnt open file &quot &lt&lt fileName &lt&lt &quot\n"

return

}

AudioAbstract *audioFile = OpenFormat(input)

if (audioFile) {

WinPlayer player(audioFile)

playerPlay()

delete audioFile

/ / Закінчено відтворення файлу cerr << "Finished playing" << fileName << ". \ N";

}

cerr &lt&lt &quot\n"

/ / Параноїдальна перевірка цілісності

/ / Області памяті

assert(_CrtCheckMemory())

}

Джерело: Кінтцель Т Керівництво програміста по роботі зі звуком = A Programmers Guide to Sound: Пер з англ М: ДМК Пресс, 2000 432 с, іл (Серія «Для програмістів»)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*