For quite a few years (on and off) I've been drilling in the fundamentals of C++ with console applications. I'm at a point where I'd like to try to develop something with a GUI. Not really interested in the game development route, but would feel accomplished with something as simple as a notepad that saves out a file.
Where should I begin with small application development that utilizes a window/GUI that I can build upon?
Window's API is your friend if you want to get really low level (well not that low, but you get what I mean). If not, there's GUI Libs you can download such as QT.
Honestly, WinAPI isn't as hard as people make it out to be. Yes it can be time consuming setting everything up and yes it requires more work to do the same task that QT could for example. I enjoy it though.
Thanks, I'll probably go with WinAPI then as I'd like to keep it as core as possible (not sure if that's the right term to use), rather than use additional libraries such as QT or WxWidgets.
Take note that WinAPI is written in C. If you're going to apply OOP concepts, sometimes they may take a little extra thinking.
Example:
You can't pass a non-static member function Window Procedure to the window class as member functions have an implicit 'this' parameter that gets passed along with it. Static functions don't have that as they don't belong to an object and are part of the class only.
The solution:
1.) Make it static (lame!)
2.) Don't make it a member function (also lame)
3.) Have 2 Window Procedures, 1 static and 1 not (not lame)
Basically you're going to pass the static wndproc to the window class and inside the static wndproc you'll make a pointer to the class that creates your window. You set that pointer to the value you get from GetWindowLongPtr. You store a pointer to your class inside the extra storage space of the window using SetWindowLongPtr that is then retrieved from the GetWindowLongPtr.
@Renthalkx97 that's a bit over my head at the moment. I know nothing of the WinAPI at the moment. So what you just said made little sense to me. I'll keep it in mind when I have an issue that may be related to what you said though.
While the advice on winapi is sound it would be worthwhile to try the other higher level alternatives first and get into the winapi as a second step. Direct winapi programming is fun but not that easy to get up and running with a simple application - but, needless to say it can be done.
Honestly, if you want to just get into GUI programming and don't care which language, Java might be the best option. It's extremely simply to create basic GUI apps. Java has all the elements you would need whereas in C++ (without a library) you'd need to implement it all yourself (listeners, a window heirarchy (frame->panel->button), etc).