?
Wenn's interessiert (eigentlich ist er ja schon outdated )
char *lpData; // pointer auf buffer mit AVI!-Data
int fileSize; // dateigröße der AVI-Datei
LRESULT CALLBACK IOProc(LPMMIOINFO lpMMIOInfo, UINT uMessage, LPARAM lParam1,
LPARAM lParam2);
void main(void)
{
mmioInstallIOProc(mmioFOURCC('M','E','Y',' '),(LPMMIOPROC)
IOProc,MMIO_INSTALLPROC | MMIO_GLOBALPROC); // installiert eigene ioProc
myPlayAvi( WINDOWHANDLE, ".MEY+", 0); // extension MEY+ teilt MCI mit eigene ioProc aufzurufen
myStopAvi();
mmioInstallIOProc(mmioFOURCC('M', 'E', 'Y', ' '), NULL,
MMIO_REMOVEPROC); // deinstalliert eigene ioProc
}
LRESULT CALLBACK IOProc(LPMMIOINFO lpMMIOInfo, UINT uMessage, LPARAM lParam1, LPARAM lParam2)
{ switch (uMessage)
{ case MMIOM_OPEN:
{ if (alreadyOpened) return 0;
alreadyOpened = true;
lpMMIOInfo->lDiskOffset = 0;
return 0;
}
case MMIOM_CLOSE: return 0;
case MMIOM_READ:
{ memcpy((void *)lParam1,lpData+lpMMIOInfo->lDiskOffset,lParam2);
lpMMIOInfo->lDiskOffset += lParam2;
return (lParam2);
}
case MMIOM_SEEK:
{ switch (lParam2)
{ case 0: lpMMIOInfo->lDiskOffset = lParam1; break;
case 1: lpMMIOInfo->lDiskOffset += lParam1; break;
case 2: lpMMIOInfo->lDiskOffset = fileSize - 1 - lParam1; break;
}
return lpMMIOInfo->lDiskOffset;
}
default: return -1;
}
}
int myPlayAvi (HWND hWnd, char *filename, int loop)
{
char cmd[300];
// MPEGVideo geht nicht.... type AVIVideo!
wsprintf(cmd, "open \"%s\" alias mympeg type AVIVideo style child", filename);
if (mciSendString(cmd, 0, 0, 0) != 0)
{
MessageBox(NULL, "MCI-Error: Kann Datei nicht öffnen!", "Fehler", 0);
return -1;
}
wsprintf(cmd, "window mympeg handle %lu", hWnd);
if (mciSendString(cmd, 0, 0, 0) != 0)
{
wsprintf(cmd, "MCI-Error: Kann window handle %ld nicht setzen", hWnd);
MessageBox(NULL, cmd, "Fehler", 0);
return -1;
}
wsprintf(cmd, "play mympeg from 0");
if (loop) wsprintf(cmd, "%s repeat", cmd);
if (mciSendString(cmd, 0, 0, 0) != 0)
{
MessageBox(NULL, "MCI-Error: Kann Datei nicht absielen!", "Fehler", 0);
return -1;
}
return 0;
}
int myStopAvi (void)
{
char cmd[300];
wsprintf(cmd, "close mympeg");
if (mciSendString(cmd, 0, 0, 0) != 0)
{
MessageBox(NULL, "MCI-Error: Kann Datei nicht schließen!", "Fehler", 0);
return -1;
}
return 0;
}
Quelle:
MSDN : http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q155/3/60.asp&NoWebContent=1
thx 2 DocJunior's AVI-Code
Soweit ich festellen konnte, wird die eigene ioProc bloß beim type AVIVideo gecallt....
MPEGVideo hab ich nicht hinbekommen ob type WAVAudio hab ich jetzt nicht getestet
gruß nameless