I have been programming in C++ for a while now, though I have always only written programs with simple command-line interfaces, never a GUI. I have one such program right now which I would like to convert into a Windows application with a full-fledged GUI with customized graphics (for buttons, etc), but I have no idea where to start.

A Google search turns up a few possibilities: I could simply use the Windows API, or MFC, Visual Studio, Qt, etc. Between all of these, I'm not really sure which to choose, or where to start with any of them. What are the pros and cons of each of these different libraries/tools, and are there tutorials or books available that I could use to learn how to use them effectively?

I should also mention that I've considered switching to C#, as I understand GUI programming is far simpler in that language. My primary concern with doing this, however, is that my program is very processor-intensive and from what I understand, C# is not as efficient a language as C++ when it comes to such programs. Can anyone shed some light on this?

Well as I imagine you've figured Windows API or MFC are both Windows only, this is fine if that is the only platform you're wanting to code for but what happens if you ever want or need to change platform? You'll find yourself wanting to learn another set of libraries which are more cross-platform.

Of course however it's up to you to decide what you feel is best for yourself, in terms of cross-platform libraries however I'd suggest QT or wxWidgets. My personal favourite being wxWidgets because of the documentation on it.

There is http://wiki.wxwidgets.org/Guides_&_Tutorials & http://zetcode.com/tutorials/wxwidgetstutorial/ for tutorials, there is also a book "Cross-Platform GUI Programming with wxWidgets" by Julian Smart and Kevin Hock http://wxwidgets.org/docs/book/. You can read more about it at the main site http://wxwidgets.org/ should you want.

Pros: Lots of documentation, cross-platform, it also uses the OS native API on whichever platform aswell. Finally it comes with a bunch of examples showing it's different features in code which can help you learn aswell. For example it has a basic video player which was built with wxWidgets which you can read the code and compile for yourself. It has it's own forums too if you need them http://forums.wxwidgets.org/

Cons: To be honest I'm not sure, I guess the biggest con for me was originally when I tried to set it up for the 1st time I didn't know as much what I were doing, the instructions for compiling it and the like were out of date yet I were trying to follow them precisely, either way once you figure that out it's a fair bit more simple in future.

I won't add too much an opinion on the other libraries as to be honest I had a look found wxWidgets to be what I felt I were looking for & went with that but I did try the Windows API & considered QT, both seem fine but I don't know the ins & outs of them. I suggest you just have a look at the sites, find what you feel will be best for you, what has the documentation that'll help you get to grips with it then go with that.

Does anyone else have any advice on different libraries/tools to use for GUIS?
Also, can anyone answer my question about C#?

Well, you should first try Windows API. To get started, try Forger's Win32 Tutorial, easily found on Google and even comes as a pdf! Then Google, Win32 API Reference. Although it is quite outdated, it still works and I always have it open when I program. As for C#, it is like Java, both derived form C++ but designed for different purposes. My advice is that you stay in C++, otherwise you may have to start again with C#. However, I also recommend you to post a question about C# in the C# forums as they will be able to help you more than me.

.Net platform compiles every program into native code before execution, so performance may not really be an issue. I'd say go with C# (and .Net) since that's the future of Windows development.
OTOH, Win32 is neither dead nor outdated. Download Windows SDK and see for yourself. But Win32 is purely C based.
If you really want to pick a C++ framework, I'd say go with Qt. It has QML, which competes with XAML of .Net and Qt is constantly improving, backed by Nokia.

This article has been dead for over six months. Start a new discussion instead.