Step 6: Handle the Capture Notifications

You receive capture notifications as events in the message loop, just as with playback notifications. Here is a sample loop:

BOOL Done = FALSE;

while (!Done)

{

DWORD dwEvt = MsgWaitForMultipleObjects(

NUMCAPTUREEVENTS, // How many possible events

rghEvent, // Location of handles

FALSE, // Wait for all?

INFINITE, // How long to wait

QS_ALLINPUT); // Any message is an event

dwEvt -= WAIT_OBJECT_0;

// If the event was set by the buffer, there's input

// to process.

if (dwEvt < NUMCAPTUREEVENTS)

{

StreamToFile();

}

// If it's the last event, it's a message

else if (dwEvt == NUMCAPTUREEVENTS)

{

while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))

{

if (msg.message == WM_QUIT)

{

Done = TRUE;

}

else

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

} // end message processing

} // while (!Done)

As already noted, if you are receiving notifications from both a capture buffer and a secondary (output) buffer, you need to distinguish between the two types of events by the index value in dwEvt. For example, events 0 and 1 might be playback notifications, and events 2 and 3 might be capture notifications.