Under Windows® the user interface elements (dialog screens, toolbars, icons, bitmaps, ...) are put in a separate resource section of an executable. In languages like Visual Basic®, C# the user interface is instead defined by code. Putting the resources separately is a useful ploy because it meant the interface can be changed (dialog resized, bitmap edited etc.) without needing to touch the program code. As the user interface designer might be a different person to the application programmer this can be a good way to divide labor. Of course it falls down if a change involves more than re-sizing and re-positioning. Adding a new control or changing its type will require application code changes, but in general it was a good concept that separated out user interface from programming.
Another reason for separating the program from the interface is when it comes to supporting multiple languages. In an ideal world supporting different languages is just a matter of providing a different translation for all the user interface elements.
InspectExe lets you list and (for purchased version) you can view all the different resource type information.
InspectExe lets you list and (for purchased version) you can view all the different resource types. Here is an example for viewing bitmaps :
Here is an example for viewing dialogs :