The old saying jack of all trades (master of none)^. Im leaning in that direction with only 2-3 years of coding. Now as for your question, personally I learned a lot of stuff from reading technical stuff, e-books on c++ from Microsoft website (completely free). You just got to do your google homework and no "how" to search for things yourself. Now in terms of GUI you can go in a few directions:
1.) you can use a pre-made library
2.) you can spent an inordinate amount of time trying to develop your own library
3.) you can use applications such as visual studio to make application specific gui.
It depends on what you want to do. Are you just making an application or are you trying to develop a library to make future applications with??
Edit:
To Answer your question in a more detailed way, I would recommend learning WINAPI and GUI events to you just to give you a picture about the "engineering" going behind every window "event" {button press, window resize, window move, minimization,maximization}. But WINAPI is very obtuse because of its general uneasyness to get in without extensive practice and research about the documentation. The c API for Winapi is so terrible imo. If you want to go into the low level graphics (OpenGl, DirectX) then it may be necessary for you to learn how a window behaves, how to create a window using only Windows functions or and a bit of ASM. If not then you will be be better off and (happier) just using a predeveloped library with classes and functions for handling the creation of GUI at a more abstracted and user friendly level.
for Ex (Windows snippet):
1 2
|
HWND hWnd = CreateWindowEx( UINT, LPCSTR, LPCSTR, UINT, UINT,
INT, INT, INT,INT, HWND, UINT, HINSTANCE, LPVOID );
|
Thats^ 13 parameters, none of which are named or give any insight on what exactly the user (programmer) should put inside, without looking up the documentation. While looking of documentation can provide insight, it shouldn't be required for every damn function in an API library.
The real question is what do
you want to do?