Visual C++/MFC Tutorial - Lesson 1: Behind the Scenes with Handles and Messages

Lesson 1: Behind the Scenes with Handles and Messages

Though you think you want to dive right into the code, you really don't. Windows programming is overwhelming at first. Let's take a quick look at how Windows works. The backbone of all of your programming will be responding to and sending messages. What are messages? Messages are simply a 32bit number designating some event. Example: You move the mouse, a message (defined as WM_MOUSEMOVE) is 'posted' to the active window. You press a key, a message (WM_KEYDOWN) is 'posted' to the active window. You resize the window, a message (WM_SIZE) is 'posted' to the active window. Get the picture?

Now where do these messages go? They get queued up and a window eventually takes them out of the queue and reacts to them. For instance when a window gets the WM_MOVE message it changes the coordinates of the window and redraws it on the screen.

Let's move on to Handles. Windows is very much object oriented. You have several window objects (like the desktop, the program your reading this with, etc...). How does the programmer distinguish all of these things in an non-object-oriented language? He uses handles.  Handles are a way to reference different windows objects. You can have handles to windows, handles to files, handles to allocated memory, handles to images, etc.  You can think of them as pointers. You must create them some how. And when you are done with them, you must destroy them. If you don't you will end up with what is called a resource leak. This could bring your system to a grinding halt. So take care to always make sure they are destroyed at sometime.

Now lets tie these two things together.  Say you have a window. You will have a handle to it (called an HWND). Lets name your handle your_HWND. The operating system wants to tell you to redraw your window because it was just uncovered by some other window. Windoze passes you a message like this:
PostMessage(your_HWND, WM_PAINT, 0,0);

This function posts a paint messages to the window with handle your_HWND. The last two parameters are used for extra information about the message. Don't worry about them for now.

Now your application will have a function with a big case statement in it to handle all of the messages. For example:

void  HandleTheMessage(long Message) 
{ 
 switch(Message) 
 { 
  case WM_PAINT: 
   DrawWindow(); 
  break; 
  
  case WM_KEYDOWN: 
  break; 

  //etc... 
 } 
} 

Ok that is basically how windows works under the hood. That should be enough to get you going when we start talking about MFC.



Comments

  • Suggestion

    Posted by P on 12/11/2016 08:06pm

    Please provide 'NEXT' and 'PREVIOUS' buttons that navigates to next or previous lesson resp.

    Reply
  • helpful for beginners

    Posted by tungnvn on 08/15/2006 02:54am

    Many learners want to code when reach new language.

    Reply
  • thank you

    Posted by Legacy on 02/04/2004 12:00am

    Originally posted by: Anna

    i have read the whole windows socket programming documentation in the msdn and there was a lot of reference on the item MFC. i worked with PFCs before but you still enlightened me on in the simple explanations above. good job and keep on writing, you have a gift.

    Reply
  • its wonderful !! but..

    Posted by Legacy on 11/15/2003 12:00am

    Originally posted by: sajeev

    its a good tutorial but it could have been more worthy if you could demonstrate it with some examples
    

    Reply
  • TELL DIFFRENCE BETWEEN POINTER AND HANDLE

    Posted by Legacy on 10/28/2003 12:00am

    Originally posted by: tapeshgoyal

    UR TUTORIAL IS NICE.PLZ TELL DIFFRENCE BETWEEN POINTER AND HANDLE

    Reply
  • could you please explain through example?

    Posted by Legacy on 09/04/2003 12:00am

    Originally posted by: sayali

    I have got whatever you wanted to explain but it would have been easier if i had some exe to show that actually.

    Reply
  • COOL AND FAST

    Posted by Legacy on 07/21/2003 12:00am

    Originally posted by: Hariprasad Ravikiran K

    I was just looking for such a tutorial to ship me safely and quickly from mid C++ to VC++ and MFC.
    Great Job !

    Reply
  • nice

    Posted by Legacy on 06/29/2003 12:00am

    Originally posted by: eager mfc learner

    that was quite nice and helpful.

    Reply
  • How nice you are!

    Posted by Legacy on 06/16/2003 12:00am

    Originally posted by: Michael

    I get more clear of handle and message processing via the tutorial. thanks very much!

    Reply
  • No f#$" problem

    Posted by Legacy on 03/07/2003 12:00am

    Originally posted by: Johny Bravo

    it's ok.

    Reply
  • Loading, Please Wait ...

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • On-demand Event Event Date: March 23, 2017 As you adopt the use of cloud services, whether in public/IaaS, SaaS or hybrid environments, the attack surface expands and, if breached, the costs increase exponentially. This session is designed to help IT and security leaders understand and address the unique challenges that enterprises typically face when they deploy their applications in the public cloud. It summarizes the areas that the public cloud vendors typically take care of and highlights the areas …

  • Modern contact centers support a variety of digital channels—email, chat, co-browsing, social, video—over multiple digital touchpoints (web or mobile devices). What they lack is the ability to link interactions in a step-by-step journey to provide a personal, contextual experience for each customer. Download this eBook. Learn how you can: Design a successful digital customer engagement strategy Provide agents with a 360-degree view of the customer across all digital channels and voice Deliver …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date