日期:2014-05-17 浏览次数:20633 次
由于看了一下,比较好理解,暂时先放到这里,待有空再翻译。只是在每节后大致介绍一下讲的内容。
感觉写的比较全,无论从消息的原理还是从MFC操作上来说,值得一看,我也在此做个收藏。
(一)
说明:以下首先对消息进行介绍,然后在消息处理中,使用类向导创建消息循环,这个操作是在vc6.0(或者之下版本)操作的。
Perhaps one of the most important means of communication in windows is Messages. The traditional program starts at yourmain()
function, moves down line-by-line in your code, and eventually exits.
The Windows concept is different. The way you program in windows is by responding to events. These events are called messages.
Messages can signal many events, caused by the user, the operating system, or another program. An event could be caused by a mousemove, a key-press, or by your window getting resized. There are 2 kinds of messages: a window message, or a thread message. Since Threads are an advanced issue, I'll refer only to window messages.
In general, a message must be sent to a window. All the messages sent to you are stored in a Message Queue, a place in the memory which stores message which are transferred between applications.
the way you retrieve messages from the Message Queue is by creating a Message Loop. A Message Loop is a loop that checks for messages in the Message Queue. once a message is received, the Message Loop dispatches the message by calling a Message Handler, a function designed to help the Message Loop at processing the message.
The Message Loop will end when a WM_QUIT
message is received, signaling the application to end. This message could be sent because the user selected Exit from your File menu, clicked on the
close button (the X small button in the upper right corner of your window), or pressed Alt+F4. Windows has default Message Handlers for almost all the messages, giving your window the default window behavior. In fact, all the standard controls are simply windows
with Message handlers. Take a Button for example. When it gets a WM_PAINT
message it will draw the button. When you Left-click the button, it gets aWM_LBUTTONDOWN
message, and it draws the pressed-button. When you let go of the mouse button it receives aWM_LBUTTONUP
message, and respectively draws the button.
Windows defines many different message types (which are stored as UINTs). They usually begin with the letters "WM" and an underscore, as inWM_CHAR
and
WM_SIZE
. The names of the message are usually a good indicator of what they represent.WM_SIZE
for sizing messages,WM_CHAR
for character entry messages and so on. The naming convention in MFC for message handler functions is to take away the "WM_" and replace it with "On", so the message handler forWM_SIZE
is usually
calledOnSize
.
A message comes with 2 parameters that give you more information about the event. Each parameter is a 32-bit value: lParam and wParam. For example:WM_MOUSEMOVE
will give you the mouse coordinates
in one paramter, and in the other some flags indicating the state of the ALT, Shift, CTRL and mouse buttons.
A Message may also return a value which allows you to send data back to the the sendi