Converting Strings

When you use the string interface, all values passed with the command and all return values are text strings, so your application needs conversion routines to translate from variables to strings or back again. The following example retrieves the source rectangle and converts the returned string into rectangle coordinates.

void GetSourceRect(LPSTR lpstrAlias, LPRECT lprc)

    char achRetBuff[128];

    char achCommandBuff[128];

 

    // Build the command string.

    wsprintf(achCommandBuff, "where %s source", lpstrAlias);

    SetRectEmpty(lprc);    // clears the RECT

 

    // Send the command.

 

    if (mciSendString(achCommandBuff, achRetBuff,

        sizeof(achRetBuff), NULL) == 0){ 

 

        // The rectangle is returned as "x y dx dy".

        // Both x and y are 0 because this is the source

        // rectangle. Translate the string into the RECT

        // structure.

        char *p;

        p = achRetBuff;           // point to the return string

        while (*p != ' ') p++;    // go past the x (0)

        while (*p == ' ') p++;    // go past spaces

        while (*p != ' ') p++;    // go past the y (0)

        while (*p == ' ') p++;    // go past spaces

 

        // Retrieve the width.

        for ( ; *p != ' '; p++)

            lprc->right = (10 * lprc->right) + (*p - '0');

 

        while (*p == ' ') p++;    // go past spaces

 

        // Retrieve the height.

        for ( ; *p != ' '; p++)

            lprc->bottom = (10 * lprc->bottom) + (*p - '0');

    }

}

 

 

Note  RECTEZENA2 structures are handled differently in MCI than in other parts of Windows; in MCI, the right member contains the width of the rectangle and the bottom member contains its height. In the string interface, a rectangle is specified as X1, Y1, X2, and Y2. The coordinates X1 and Y1 specify the upper-left corner of the rectangle, and the coordinates X2 and Y2 specify the width and height.