That's normally named MDI (multiple documents interface) programming.
Detailed info can be found
here.
They are used also in many sample codes in PellesC, see
here.
About the single or multithreading execution it is just your choice dependent on what you need. You can create as many windows as you need in both cases, the difference is that with a single execution thread all the actions will be executed one at time (serialized) in a multithreaded environment you can execute more actions concurrently.
Be aware that window interface pose some limitations in multithreading, a window created in a thread cannot be fully managed in another thread! For each window API look carefully in the documentation if there is any thread limitation when you use them.
The normal coding practice is to use one thread for the GUI (creates all windows and manages all graphical interface) while the other threads are created for a specific purpose (take care of comms, I/O, long math calculation, etc.).