C++ Windows Programming?

Hey everyone, I’m wanting to learn C++ (I have a basic knowledge of it already though, unfortunately it’s mostly forgotten though) and using it to make windows applications with a GUI. Preferably free online material, does anybody know where to start? Thanks! Programming Level: Novice

Oh. P.S. Yes I’ve used microsoft’s visual express stuff, didn’t like it much and I would like to learn something used in the real industry, more powerful, and that doesn’t give you all the hard code for you XD

The only free solution that I know of that gives you a GUI is… Visual Studio Express C++…

All I use in college is the command line, which can be programed with virtually anything. Dev-C++, Visual Studio, and my personal favorite, Xcode (for OSX).

I’ve been going to cprogramming.com, excellent resource. As for compilers, Dev-C++, have been using this for years (well, spanned out over years). Can’t you make a GUI with the windows API???

If you want to do the REAL low-level stuff, then you want to learn the Win32 API, where you handle messages in what is called a WndProc and use SendMessage to change your UI state. I can assure you that there are places in industry that do this, though there is a strong and growing tendency to make GUI-heavy apps out of something a bit easier to use than C++/Win32 (in particular C# or using something other than Win32, like MFC or WPF).

What’s cool about Win32 is that you can make some pretty expansive apps with very small executables. Though I’m not sure, I bet that uTorrent is made with low-level Win32, which explains its microscopic binary size.

Anyway, although I don’t have a tutorial to start from, I can tell you a few keywords to go from:
-You want to make a dialog. You’ll need to make a parent-window first, but just about any IDE (Code::Blocks, Visual C++) has a project template that will create your window for you.
-You make the dialog in the resource editor, give the elements of it identifiers, and then can refer to those identifiers in code
-You’ll want to make very heavy use of MSDN. Here’s a good starting point: http://msdn.microsoft.com/en-us/library/ms632679(VS.85).aspx

“The industry” uses Visual Studio quite often (although C# and VB are more popular choices than C++).

Why spend time and money writing something that you don’t have to? Sure, its a fun mental exercise to learn the low-level stuff, but in today’s fast-paced competitive environment, anything that does not require you to do so is an important tool.

You might want to look into using GTK (or GTKmm), QT, or WxWidgets. They’re GUI libraries that you can use with C++. GTK also has a GUI editor for it you don’t want to hard-code EVERYTHING, but you still have that option available.

I would recommend using WxWidgets. It’s free, where Qt costs I think a few thousand dollars to use.

There’s also a great forum available: http://wxforum.shadonet.com

I’ve just about completed my first C++ application with a GUI, using WxWidgets. There are two screen shots on this page: http://roboticsguy.com/software/dspic-serial-communicator/

I believe QT is free for non commercial use and maybe even free for commercial use now. After all KDE is using QT.

For Windows you can use wxdevc++ it is a devc++ based wxwidgets programming ide. Unfortunately I think wxwidgets is needlessly complex so I do not use wxwidgets… but maybe you will like it?

OK, I just checked on the Qt website. It looks like they do have a free version available under the LGPL license. But, if you ever decide you want to sell one of your programs with Qt, you’ll have the pay the 4K licensing fee.

WxWidgets has a lot of features, maybe that’s what you mean by complex?

If you decide to try out WxWidgets, use the “WxPack,” not the “real” version where you have to build the library yourself.

Alternatively you could use a customized build of devC++, that you are already familiar with but with enchantments for wxwidgets.

http://wxdsgn.sourceforge.net/

Nathan: If you look at Qt and WXwidgets I think Qt has much more intuitive classes and easier ways of doing things. with wx it seems to me like everything is crytically named and you need to memorize completely unintuitive things. But thats just my opinion. I haven’t done much development with wxwidgets (only basic examples).

If you go to zetcode.com they have examples that do the same thing in QT, gtk, wxwidgets ect… I think wxwidgets is the most unintuitive. But you can decide for yourself. Whatever works for you is the best.

Thanks everyone. Currently I’m just working with console applications but I tried making a window with win32 and it wasn’t so bad…lots of customization

I created my GUI WPILib Test Harness (allows you to run your bot code on your computer) using wxWidgets. http://www.chiefdelphi.com/forums/showthread.php?t=75811

wxWidgets has a nice option called XRC, that allows you to design the GUI part separately from the code and change it after compile time. Tools like wxFormBuilder allow you to modify the XRC files in a WYSIWYG style.

You will find that Visual Studio is, by a pretty large margin, the most used compiler in industry. Most everything you will use in Visual Express will be applicable to Visual Studio. So, if you want industry, you want to start with Visual Express.

There are other free tools out there as were listed in the other replies. A few are pretty good. Most are, well, written to be free and not as feature rich or as reliable as the Microsoft offering.

If you want to learn the programming language, I highly recommend writing a Win32 console applications for a while. The GUI stuff on any platform may distract you from learning the basics of the language. Everything you learn about the C++ language in a console application will be 100% applicable when you get ready to write a GUI application.

Kevin

If you’re a student, you can get Visual Studio for free! :smiley:

https://downloads.channel8.msdn.com/Default.aspx

Sorry if this has been suggested already…

http://wiki.eclipse.org/index.php/CDT

My recommendation is to first learn the language, and then learn how to add a GUI.

The book I recommend for learning the language is C++ How to Program (ISBN-13: 9780136152507)](http://search.barnesandnoble.com/C-How-to-Program/P-J-Deitel/e/9780136152507/?itm=1) or C How to Program (ISBN-13: 9780132404167)](http://search.barnesandnoble.com/C-How-to-Program/Harvey-Paul-Deitel-Associates/e/9780132404167/?itm=10). This is the book I used to learn C. There are probably lots of other good ones out there, but from first-hand experience, I can say that C How to Program is a top-notch book. It has lots of tutorials and problems and exercises for you to work through. Once you rate yourself above “Novice” level, then learn how to add a GUI. Unfortunately, neither of these books are cheap (you certainly don’t need both), but you may be able to find one at a used book store for much less (especially if it’s an older edition).

I’m going to speak out against that recommendation.

A good GUI really wants to have the program written around it, rather than putting a GUI on top of a program. The event-driven model adopted by most GUI frameworks is something that needs to be considered from the beginning. If the goal is to write fully-functional and easy-to-use Windows applications, I would suggest starting with the GUI features right away, incorporating the necessary programming idioms and following high-level examples. Once the basic shape of the framework is known and mostly understood, then the task of closely studying the language in context can be fruitful.

I’m currently going through Sams Teach Yourself C++ in One Hour a Day, sort of a 888 page bible on C++. It’s extremely well written with lots of good stuff. GUI is the next step afterwards… I’m probably going to use DirectX or OpenGL

I agree. What I meant was that I believe one should first learn the structures of the language – how do pointers work? what are linked lists? what are queues? what are objects? how does inheritance work? etc – before learning all the GUI functionality. I meant that one would “add GUI programming to their body of knowledge”, not that they would “add a GUI on top of an existing program”. I probably wasn’t clear on that point.

Everyone learns differently. In my opinion, the more linear nature of simpler non-GUI programs is easier to understand that the event-based, message passing model of most GUI frameworks. To other programmers, the event-based model might make more sense.