After learning the basics of C++ and having coded a few basic console applications (Tic Tac toe, etc), I have a few questions that none of the tutorials seem to explain:

1) Is it possible to draw to a specific part of the console rather than just printing to the next line (using cout)? That way it would be possible to learn C++ by trying to write more complex programs eg ping pong etc.

2) Rather than just writing console applications it would be kinda nice to be able to write programs with a gui. I know that this is possible if I learn windows API, but I am also using linux and also mac occasionally... It would be good if it were possible to write multi-platform stuff. I know this is possible with the likes of gtk and qt etc but what happens when I want to add something other than a standard button or text box, for example, a box that displays a 3d view of something? If I did this without gtk would it be possible to port the program to linux easily?

Also (please correct me if I'm wrong) applications like Firefox and iTunes etc are multi-platform, but don't use gtk or similiar? So they are either programed for windows to start off with, then ported to linux and mac, or, are they somehow coded for all 3 from the start?

3) OpenGL, DirectX or neither? I have noticed on some 3d applications that the settings dialog has check box for OpenGL - this implies it is possible to program a 3d application from scratch?

4) 2D applications - how do I create a graphical 2d application (eg a super-mario clone) that can be multi-platform? Also how is it possible to create a gui that has includes a graphical 2d view part of the gui (eg a music composition program, that includes a graphical 2d viewport displaying the music score)?

And lastly, what is MS Visual C++ - at the moment I am using Code::Blocks on both my linux and windows desktop. Does visual c++ just do the same thing, or is it specifically meant for windows applications - if so is it possible to port these to linux or mac? I have noticed that Code::Blocks does not have any way of 'painting' a gui - for larger programs this would make the gui display bit very hard. Does MS "visual" C++ include something so as it is possible to visually place objects such as scrollbars and buttons?

If anyone could shed some light on any of these questions it would be greatly appreciated! After having finished a few small applications I seem to have a lot more questions than when I started :-)

Thanks!