Click here to Skip to main content
14,920,295 members
Please Sign up or sign in to vote.
5.00/5 (2 votes)
See more:
Hi everybody!

So The concepts I have studied in c++ are Sequence, Selection, Repetition, Object-Oriented (Encapsulation, Inheritance, Polymorphism), handling classes Generically with Dynamic Memory. I am an A+ student in college on my first co-op term and I am wondering where should I go next in-order to keep developing my understanding of the language. So I Asked one of my professor where should I go next. He recommended either win32 or MFC. Now I do not know the different between the two or are they the same thing? and if they are different which one would everyone recommend for beginner getting into c++ GUI's? I am also wondering if there are any good tutorials or books anyone would recommend to me.

I have made GUI's with Java and Visual Basic ( providing this information just in case it would be helpful) I am sorry if my question is not specific enough and if more information is require let me know!

Thanks for everyone's time!!!


Thanks for everyone's opinion! It has given me a great idea of what I need to do and of all my options!!

Thanks everyone and take care!!
Updated 28-Jan-11 12:47pm
Sergey Alexandrovich Kryukov 28-Jan-11 16:48pm
Everybody is a bad guy, don't listen to him.
RobNO 28-Jan-11 18:45pm
All people is a bad guy?
Sergey Alexandrovich Kryukov 28-Jan-11 19:15pm
Explaining step by step. This is a "joke of humor" :-) English "everybody" has a singular form while referring to a fuzzily-defined set of individuals. While using "everybody recommends" is acceptable in language, the phrase is often considered as abusing of common idea of attribution of personal traits to a non-personal entity, such as "company", "government", etc., and, actually "everybody". Even though "everybody" understands (pun intended) that there is no strict sense in an expression like "company decided" or "company has a vision", such expression is used as an acceptable impersonation of the related entities. In such cases, the action of such impersonated entity should not be understood literally: a company never can decide anything, but the indirect meaning uses assumption that there is the most influential person who actually made a decision which was accepted my the most powerful members of the company.

The paradox of assumed impersonation is manifested more explicitly when the expression "everybody recommends" is used ("s" suffix is important at the end). The whole notion of some recommendation shared by "everybody" strongly suggests thinking in some kind of Totalitarianism style in the person who uses such expression, or perhaps, mimicking such thinking.

My comment I posted above, in turn, presents a parody on such thinking as well as the way to formulate questions. Negative connotation I expressed through the evaluative term "bad guy" suggests some negative attitude against impersonating of heterogeneous community in such a Totalitarianism-style manner. Such impersonation would create humorous effect due to striking contrast to real-life characteristics of the software development community we observe... well, "everywhere" :-)

I hope this little clarification will help you dealing with linguistic realities in highly diverse environments.

Thank you.
RobNO 28-Jan-11 20:01pm
I got nothing.

Thanks for being thought provoking!! I will reconsider using the word"everybody," while greeting multiple individuals.

MFC would be the way to go, but don't discount Win32. While you may never use it develop application, but understanding Win32 will make you life a lot easier with MFC. MFC encapsulates a lot of Win32 internally and it hides a lot of details you from you. Having good understanding of Win32 will help you understand some of the dark corners of MFC.

In addition, if you want to venture further to ATL, have good understanding of Win32 will be helpful. So, don't waste too much time with Win32 but try to understand it and move on with MFC.
RobNO 28-Jan-11 7:40am
Thanks for your reply!

I think I will start learning Win32 because it seems like its the foundation to a lot of application programming interfaces.

Thanks for your time,
MFC, tough a bit obsolete, makes an OOP approach to GUIs while Win32 is a plain C (neat) API.
Hence MFC probably fits better with your need to understand C++ GUI 'how to'.
You may also have a look at QT[^].
RobNO 28-Jan-11 7:46am
Thanks for your reply!

Do you believe that there could be some benefits in learning MFC as I am only trying to learn the fundamentals? or would QT serve a novice better?

Thanks for your time,
CPallini 28-Jan-11 8:22am
Yes, you will have some benefits (I don't know if learning QT would be better).
Emilio Garavaglia 28-Jan-11 7:55am
QT is not properly C++ ...
Good product, big audience ... but not something to concentrate for researches.
CPallini 28-Jan-11 8:06am
"Qt uses standard C++ but makes extensive use of a special code generator (called the Meta Object Compiler, or moc) together with several macros to enrich the language." - looks at least 'interesting'. :-)
Emilio Garavaglia 28-Jan-11 11:54am
What moc does is generate c++ code that can be generated with a good mix of templates and RTTI. But it was developed before template and template specialization were standardized.

It has certainly a big audience and a wide set of platforms, but if you want to develop a more innovative code, that sounds "old style coding".
If you have time than my suggestion is try to learn both and or at least understand the concept. Both are equally good.
I personally love COM and ATL.
RobNO 28-Jan-11 7:47am
Thanks for your reply!

I think that is a great idea, however I am trying to figure out which one I should start learning first.

Thanks for your time,
Personally I've had more time with WIN32 than with MFC. If you're looking to specialize in C/C++ you must learn both. I suggest that you start with WIN32 and then move on to STL, MFC, COM and ATL. Your best resource is definitely the MSDN! Make sure to reference to it when using new functionality. For the rest there's always Google.

For those saying that WIN32 is obsolete, I shall say to think again. Currently I'm working with C/C++ WIN32 applications, using COM in multi-threaded environments. There's a huge difference between C/C++ and C#. If you understand correctly C/C++ you'll find that the language helps you much more to develop software which merges with and makes use of the Windows API.
RobNO 28-Jan-11 7:50am
Thanks for your reply!

It seems more ideal to start learning WIN32 So i think I am probably going to take your advice and do that.

Thanks for your time!
There is no simple answer, I've developed on win32, MFC and C++.NET

All of these are targeted at Microsoft windows desktop application development.

Personnaly I wouldn't recommend win32 for GUI development because it takes a log of code to event create a simple window.

MFC is built on top of Win32 API to take away a lot of the pain an encapsulates it all nicely. MFC will build faster code than .NET and is straight C++.

If you look at C++.NET You can mix unmanaged C++(you create and delete objects) with managed C++(.NET handles the deleting of objects (like Java)). The .NET framwork is Managed and provides the GUI classes. This I would say is easier to learn than MFC Also you can get a free express edition to learn it with.[^]

.NET also offers WPF for GUI. .NET is availble with many languages C++ and C#

The choice is yours

For speed and unmanaged C++ MFC.

For ease C++/CLI/.NET

I would recommend this index to see the most popular languages[^]

P.S. If you develop for a linux platform you have a whole new set of options
RobNO 28-Jan-11 7:52am
Thanks for your reply and time!
I wouldn't skip win32 and go to MFC if I were you. MFC is basically a wrapper around win32. Having a solid understanding of the basics in win32 is a must before you jump into MFC(Trust me I had difficulty and shock looking at stuff like LPCTSTR, HWnd, CWnd etc. all of a sudden without knowing what they were for).

I would recommend you look up theForger's win32 tutorial and MSDN as well.

Try this for a good head start:[^]
First you speak about "Sequence, Selection, Repetition, Object-Oriented (Encapsulation, Inheritance, Polymorphism)" (that are general programming concept not necessarily specific to C++) then you talk of GUI in term of Win32 and MFC.

Well ... how much you want to study and how much you need to be immediately productive? How much "business" and how much "reaserch" is behind your "production"?

If you did GUI with Java and VB and you know C++ you will have no problem with C# or C++/CLI.

If you want to understand the how the OS work, go to Win32 or XWindow(for Unix/Linux), no chance. But that's plain C.

If you need a C++ representation of a GUI, MFC is one of them. But it's not "Up-to-date" C++ programming, and is Windows only.
If you need to be multiplatform, then start with something simple, like FLTK[^] (The last C++ book from Stroustroup has samples with it), than consider GTKMM [^]

If you want better "modern C++ programming" library, consider VCF[^] or Algierlib [^](still in development.
RobNO 28-Jan-11 18:35pm
Thanks for your reply!

I am aware Sequence, Selection, Repetition, Object-Oriented (Encapsulation, Inheritance, Polymorphism) are general concepts. My point was is that I am able to do them in C++.

I am not totally sure what you mean by this: "Well ... how much you want to study and how much you need to be immediately productive? How much "business" and how much "reaserch" is behind your "production"?" If your wondering how much do I want to study, my answer is a lot.

I will check out those GUI you have listed (especially if Stroustrup recommends it!).

Thanks for your time!!
Emilio Garavaglia 29-Jan-11 12:41pm
Let me clarify what you asked about "Well ... how much you want to study and how much you need to be immediately productive?"

Since you began your talk as a "computation theory student" I was supposing you are completing a phase of your study and you are now required to make some choices.
The point is understand if you are still a student (and are just selecting the next courses) or you are anymore a student and are now seeking for a job.
The answer can change since in the first case you may target a more long term view about what's going on in the world of GUIs. And you have probably to look to product that are still projects and that have some development and research on them, rather than to product that are on the road for more than a decade and have a compatibility backlog that stuck them into a state of the C++ language that is pre-standrd.
But, if you have to be productive, you need to know today mainstream technologies, hence, forget C++0x and even sometime the STL, and be prepared to lots of macro-based implementations (a-la WxWidget, or QT, or MFC) or to proprietary language extension form managed environments (a-la C++/CLI).
Take a look at C++ Builder[^]

Nice proven component based class library - good visual design environment. Finish you projects in days using VCL instead of years using MFC.

Delphi/C++ Builder is what Anders Hejlsberg[^] was doing before he left for Microsoft, where he became the lead architect of the team developing .Net and C#.

Espen Harlinn
Sergey Alexandrovich Kryukov 28-Jan-11 17:07pm
Espen, just out of my curiosity: could you elaborate on this?

You know I valued Delphi very high and worked with VCL tightly, have a printed publication, etc.

As Borland C++ Builder, I worked with this thing just on couple of small projects, a long ago (I even told you I did not but later I remembered I did -- too long ago). Since that time I had an impression that Microsoft and MFC went forward and Borland lost the lead; also, Visual Studio probably puts more of technology under the same umbrella environment and even cost less for a company which subscribes to MSDN. I want to emphasize, I don't have certain opinion but rather want to hear about yours. What are in-depth reasons to prefer C++ Builder over Visual Studio?

Thank you.
Espen Harlinn 29-Jan-11 2:23am
I’d choose C++ Builder with VCL over Visual Studio with MFC because it lets me implement a reasonable nice looking application using a visual design environment – I can design a C++ builder application using the same visual designer that’s available for Delphi applications. When you are working with MFC there is no comparable visual design environment as the dialog editor doesn’t really count. Doing a nice UI in MFC for a regular line of business application requires a lot more effort. The database centric capabilities of C++ Builder with VCL are the same as for Delphi – the database capabilities available with MFC requires a lot more work.
That being said, Visual Studio has, in my opinion a better code editor, and Microsoft’s C++ compiler is both faster and better than Embarcadero’s C++ compiler. It’s the capabilities of VCL and the design environment that makes me prefer C++ Builder with VCL over Visual Studio with MFC.
Thank you, Espen, that I can understand.
Hey man, if you're using c/c++ why not use QT?

It's completely cross-platform (or nearly), you can write your code once and have it compile on windows, osx, linux, etc...

It teaches you some very good design practices and you aren't forcing yourself to learn MFC, which is OK, but also forces on you a lot of non-standard classes, like CString instead of std::string.

To each his own I suppose...
If you're interested in actually getting a job when you leave school, I would recommend going to C# in .Net. It's getting increasingly difficult to find jobs in native programming.
RobNO 28-Jan-11 7:58am
Thanks for your reply.

I believe an employer would love to have a programmer who is able to program in a lot of different languages and likes to challenge himself. C# might actually be what I am doing for a career however COBOL seems pretty likely as well. C++ is a lot harder for me to grasp so I am going to spend more time on that in order to get over the learning curve. Furthermore I will continue to practice C# and Java as I work towards my C++ goals.

Thanks for your time,
[no name] 28-Jan-11 9:58am
You should know some languages syntax and choose one language to work.
RobNO 28-Jan-11 18:36pm
Thanks for your reply!

What if my job requires me to learn more than one language?

Thanks for your time!
I personally prefer C# or C++/CLI .NET for GUIs
RobNO 28-Jan-11 7:43am
Thanks for your reply!!

I am looking to learn fundamentals in c++. I currently do know a bit about c#, however, I still do need to learn a lot more about it. I am basically trying to get my understanding of c++ up to my understanding of Java and c#.

Thanks for your time,
Sergey Alexandrovich Kryukov 28-Jan-11 16:57pm
I decided to vote "5" by only one reason. OK, this answer is off-topic because OP only wants to discuss C++. But what's the harm if one merely expresses one's opinion, which makes certain sense? You simply offer to think in wider scope.

I would vote "1" if the contribution is telling lie, dishonest, fraudulent, spamming, aggressively ignorant, "2" if it's a bit better, misleading, etc. This answer is nothing like that, so I found it possible to counter-act just a bit with my vote.

RobNO 28-Jan-11 18:41pm
Thanks for your reply!

You do make a good point in terms of there is no harm expressing one's own opinion.

Thanks for your time.
Sergey Alexandrovich Kryukov 28-Jan-11 19:36pm
No problem. My reaction has nothing personal. I reckon some unresponsive member behavior should be spotted and opposed. Unfortunately, I feel that many good members are too much careful in discussion of interesting but controversial topics under the potential pressure of aggressively ignorant voters. I'm trying to relax the situation using... well, some live methods of discussion.

For example, please see my comments to the present Question (on the very top of this page). Another example -- my answer to this question: (More to come.)

What do you think?

Thank you.
RobNO 28-Jan-11 20:12pm
I think you talk about things in a way that stimulates thought, which is good because much can be accomplished if the reader is interested.

Thanks for being very smart!
Sergey Alexandrovich Kryukov 28-Jan-11 20:36pm
I knew you would understand.
Pleasure talking with you.
Best wishes,
Win32 is utterly obsolete, even more so than MFC and C++. Go MFC for sure.
RobNO 27-Jan-11 21:07pm
Thanks for your reply!

Is there a more up to date c++ Interface classes I should learn? Do you recommend learning how to create GUI in another languages and if so which one?

Thanks for your time,
T2102 28-Jan-11 2:16am
WPF in C# is more current
RobNO 28-Jan-11 7:39am
Thanks for your reply!

I have actually learned quite a bit about that already. I will expand my knowledge on that as soon as I get a little bet better in C++

Thanks for your time,
Emilio Garavaglia 28-Jan-11 11:58am
They are so obsolete all framework are created on top of them! ;-))
CPallini 28-Jan-11 15:41pm
At first I thought the same, then I interpreted his words this way: "no employer will ask you to build GUIs using Win32".
Christian Graus 28-Jan-11 14:04pm
There's nothing that's replaced MFC, although WTL gets a look in, I think. I think it's good to know how Win32 works, but I don't think it will help you get a job. I think C#/WPF is the framework that will get you a job. Knowing how C++/MFC works too, is not bad, I do C++ work from time to time, but C++ will make C# harder for you, b/c it looks the same, and is SO different.
See also the answers on this thread:
While you may never use it develop application, but understanding Win32 will make you life a lot easier with MFC. when you worried about it. i suggest one site also all over student and that are the it is very popular site for all field student on this site you get free download book as you want.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900