I learned C++ a few years ago and I have to say it is the most powerful, but still high-level language. That means it is just, well, a little bit harder than languages like C# but you get a handsome performance reward.
If you want to learn more about the way GUI's work and why the component model is the easiest to use, well, there just isn't a simple way to explain. It all boils down to the component model working well with object-oriented programming.
For example lets say you want to model a tree in your application. Well, then you could add a few properties to your tree -- how tall it is, how wide it is, how many roots it has, and how many branches. You could add a timer to it and tell it to grow 10 pixels taller and grow an extra branch and root every 30 seconds.
Now let's say you wanted to view your tree. Well then, you'd have to add a paint method and call it from the main window (the parent). Let's say you add a whole bunch more stuff -- like clicking on a branch removes that branch, etc.
But now lets say you wanted to do something silly -- be able to move your tree. Well, you'd want it to just simply be painted in a different place -- but you also want all the logic and hitboxes to move with it. Well CRAP, everything is hard-coded, you have to change all those values too. Maybe we should just leave it where it was coded.
Here is where components step in. You make the tree a component, and all the logic inside of it becomes automatically relative to its upper left hand corner, which the parent can change. Now you can just call tree->setBounds(x,y,width,height); and put it anywhere! On top of that, you can even create another component of lets say, apples, and have the tree own and display them. Then the apples will move around with your tree too.
That's the idea at least. It's worked really well since 1989, so I've given up fighting it :)