Hello, I'm the programmer for the MS F/A-18 gauges, so I might be able to help you
Event ID's are very easy to find: inside the modeldef.xml, the only "unusual" thing is that, instead of having a token name, they are called directly by number, which the XtoMDL compiler accepts anyway.
Standard key events have numbers ranging from 0x10000 onward, but Microsoft provided a range from 0x11000 onward to be used by 3rd party developers to create their own "custom" event. Unfortunately, I don't know if anyone ever used that feature...
The advantadge of using custom events, is that you can "trap" them in your code, instead of relying of horrible polling methods.
What will happen is that, instead of you having to constantly poll a variable to have a certain value (to fake Callbacks and custom events) your code will be called only if an event has been triggered, and then you can test its value to see if the event is what you were waiting for.
To do this, you need to define a keyboard handler, using the appropriate SDK call.
Of course, this is C/C++ only...
There aren't much bitmaps in the F/A-18, I think the only ones are the static backgrounds of the radio panels but, other than that, analog instruments are fully 3d with the backgound in the VC texture itself and the needles made as 3d objects. All the glass instrumentation has just a black background, and everything is drawn with GDI+. There are no icons, no sprites, no strings at all in the whole code...
You can trigger the different mfd screens, but "firing" a custom event, by passing to the send_key_event() function the direct hexadecimal value. For example, calling it with 0x00011101, would fire up the left DDI button 1.
If you want to create your own aircraft VC, using the F/A-18 MFDs, it should be quite easy: you just need to create each button in Gmax/Max and tag it using all the correct button definitions, which are found in the modeldef.xml file
regards,
Umberto Colapicchioni - VIRTUALI s.a.s.