I don't have time to write the whole C++ procedure for you, but I can get you started at understanding the VB code so you can write the C++ code.
The first thing to understand about the file format of the .MAP file is that it consists of many sections. Each section contains a 4-character header followed by a 32-bit integer representing the length in bytes of that section. The one exception is the BMGC section which has a version number between the header and the section length. For example, the file I am looking at has BMGC0005 as the first 8 bytes. The next byte is 0x12 (hex 12 = decimal 18) followed by 3 zero-bytes. That represents a long integer whose value is 18. So the next 18 bytes represent the BMGC section, and immediately after that is the "LYRS" section header.
You will see that the first line that reads the file is "Get #FF, , S". Since S is a string containing 4 characters, this will read 4 characters (8-bit characters) from the file. You will see that the code is verifying that the first 4 characters are "BMGC" which is the signature for the beginning of the .MAP file.
Next it does "Get #FF, , S" again which reads the next 4 characters. These 4 characters represent the version of the MAP file as a string. For example, "0005" represents a map file from GameDev version 1.4.x.
Next it does "Get #FF, , SLen". Since SLen is declared as a "Long", it will read a 32-bit integer from the file. This integer represents the length of the map header section of the file before you get to the LYRS section. It is the number of bytes after the end of this integer and before the "LYRS" signature.
Next it does Get #FF, , PixWidth, which you will see is a property of the Map object at the top of the file. It is declared as a Long, so it too will read a 4-byte (32-bit) integer from the file. This integer represents the map width entered by the user (the width of the map in pixels).
Get #FF, , PixHeight is treated similarly.
Next you see BackgroundMusic = LoadString(FF). The LoadString function will perform two main steps. It reads a long integer from the file. Then it creates a string whose length matches that integer and reads that many characters into the string. This particular string represents the name of the background music clip for this map.
Next you will see that it reads a long integer called BackgroundColor from the file, but only if the version of the file is greater than 4 (because background color did not exist before version 1.3).
If you continue to follow the function through like this you can identify every byte in the MAP file format. I don't have time to finish the entire description here, but this is a basic picture of what has been covered so far:
"BMGC" - map header signature
"000n" - 4-character string representing map version (0005 is 1.4.x)
32-bit int - length of remainder of BMGC section
32-bit int - Pixel width of this map
32-bit int - Pixel height of this map
32-bit int - length of background music string
<string> - name of background music for this map (length determined above)
VERSION 4 OR LATER: 32-bit int - background color of this map
Is this helpful at all? Can you proceed to understand more of the function based on this and let me know where you get stuck or are you completely lost still?