Visual
C++/MFC Tutorial -
Lesson 1: Behind the Scenes with Handles and Post
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.
Windows 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.
|