Timers and Animation

theForger's Win32 API�̵̳ڶ���(��������)

��ҳ

����
  1. ��ʼѧϰ
  2. һ���򵥵Ĵ���
  3. ������Ϣ
  4. ������Ϣѭ��
  5. ʹ����Դ
  6. �˵���ͼ��
  7. �Ի���
  8. ��ģ̬�Ի���
  9. ��׼�ؼ�
  10. �Ի��򳣼�����
����һ����Ӧ��
  1. ������ʱ�����ؼ�
  2. �ļ��볣�öԻ���
  3. ��������״̬��
  4. ���ĵ�����
ͼ���豸�ӿ�
  1. λͼ���豸������
  2. ͸��λͼ
  3. ��ʱ���붯��
  4. �ı����������ɫ
�������ĵ�
  1. �ο�
  2. ��ѵ�Visual C++�����¸��£�
����
  1. ��������Ľ�Q����
  2. API vs. MFC
  3. ������Դ�ļ���˵��

������Ϣѭ��

������д�κ���ʵ�ʼ�ֵ�ij���֮ǰ����Ҫ����������Ϣѭ����windows���򴫵���Ϣ�Ľṹ����ǰΪֹ�����Ѿ�����һЩ��Ϣ�Ĵ������һ�Ӧ�ø���һ���Ŀ�һ����������� ��Ϊ��������������ǵĻ�������ă��ݽ�������������

ʲô����Ϣ��

����һ����Ϣ����һ������������㵽ͷ�ļ�����һ�����˽�API�ĺõط�����ͻᷢ�������ă�����

#define WM_INITDIALOG                   0x0110
#define WM_COMMAND                      0x0111

#define WM_LBUTTONDOWN                  0x0201

������

�ȵ�.����Ϣ��������windowsϵͳ�е�����ͨ���������ڻ������������������������Ҫ��Ĵ��ڻ��ǿؼ�����ʵ��һ���؄e�Ĵ���������ʲô��͸���������Ϣ�� �������һ������Ҫ������ʲô��Ҳ������һ����Ϣ.������������Ñ������˼������ƶ�������������һ����ť֮����¼���ϵͳ������صĴ��ڷ�����Ϣ����Ҫ�Ǿ���������������Ϣ�����������Ҫ������Щ��Ϣ��

����ÿ��windows��Ϣ����ӵ����������������wParam��lParam�����wParam��16bit��lParam��32bit������Win32ƽ̨�����߶���32bit.����ÿ����Ϣʹ������Щ����������ÿ����Ϣ�Բ�ͬ�ķ�ʽ��ʹ����������WM_CLOSE��ʹ��������һ����������Ӧ�ú���������WM_COMMAND��Ϣ������ʹ����wParam������������HIWORD(wParam)�к�����ʾ��Ϣ������еĻ�����LOWORD��wParam�����з�����Ϣ�Ŀؼ���˵��ı�ʶ����lParam���з�����Ϣ�Ŀؼ���HWND�����ڵľ��������ΪNULL������Ϣ�����ɿؼ�������

����HIWORD()��LOWORD()��windows�������������������һ��32bitֵ�з��������(0xffff0000)�͵���(0x0000ffff)�����ֽ�����Win32�У�һ��WORD��16bit������һ��DWORDΪ32bit��

����������PostMessage()��SendMessage()��������Ϣ��PostMessage()����Ϣ������Ϣ�������������أ�����˵�������PostMessage()����Ϣ���ܱ������ˣ�Ҳ���ܻ��]�б������� SendMessage()����Ӱ���Ϣ�������ڲ����ڴ��ڛ]�н���������Ϣ֮ǰ�����أ����������ر�һ���������ǿ��Է���һ��WM_CLOSE��Ϣ��PostMessage(hwnd��WM_CLOSE��0��0);������ǵ�����ڶ����� [x] ��ťһ����Ч����ע��wParam��lParam��Ϊ0��������Ϊ���Ǹղ�˵��WM_CLOSE���������ǣ�

�Ի���

����һ���㿪ʼʹ�öԻ����㽫��Ҫ��˿ؼ�������Ϣ��������ͨ�ţ��������ʹ��GetDlgItem()����ID�õ��ؼ��ľ��Ȼ����SendMessage()��Ҳ����ֱ����SendDlgItemMessage()���һ����λ�ĺ����������һ�����ڵľ����һ���Ӵ��ڵ�ID�����ͻ�õ��ִ��ڵľ��������������Ϣ��SendDlgItemMessage()�����Ƶ�API����GetDlgItemText()�����������еĴ������棬�����ǽ����ڶԻ����ϣ�

ʲô����Ϣ����

��������ȷ��������ڴ���WM_PAINT��Ϣ����ʱͻȻ�Ñ��ڼ���������һ��ѵĶ�������ʱ�����������Ӧ����ֹ��Ĺ���ȥ��Ӧ���̵����룬���Ǽ򵥵ذ���Щ��������Ե�����������Ȼ���ַ�ʽ�����ܽ��ܣ�����������������Ϣ���еĸ����Ϣ������ʱ�ͱ�������У���������ʹӶ�����ɾ������ͱ�֤���㲻��G����Ϣ�����ڴ���ij����ʱ������ľ��ڶ����еȴ�����ȡ�����ǣ�

ʲô����Ϣѭ��

while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
    TranslateMessage(&Msg);
    DispatchMessage(&Msg);
}
  1. ��Ϣѭ��������GetMessage()�� ���������Ϣ������ȥ������������ǿյ���ij�����������ȣ���������������

  2. ��һ���¼���������һ����Ϣ�ӵ�������ȥ������ϵͳע����һ���������GetMessage()�ͷ���һ����ֵ��ʾ��һ����Ϣ�������������������Ǵ��ݵ�MSG�ṹ����������������WM_QUIT���ͷ���0������д������ͷ�����ֵ��

  3. �����õ��ź�����Msg��������������TranslateMessage()��������һЩ����Ĵ�������̓��ֵתΪ�ַ���Ϣ����һ����ʵ�ǿ��п��޵���������Щ�ط����������������

  4. һ������Ĺ�����������ǰ���Ϣ����DispatchMessage()��DispatchMessage()�ȿ����ź��Ǹ��ĸ����ڵ������ҵ��Ǹ����ڵĴ��ڹ���. �ٵ����Ǹ�����������Ϊ���ڵľ������Ϣ��wParam��lParam��

  5. ����Ĵ��ڹ���������õ�����Щ�������Ϳ���Ϊ����Ϊ���������]�д���ijЩ�ض�����Ϣ������͵���DefWindowProc()��Ϊ����һЩĬ�ϵIJ�����һ�����ʲô����������

  6. һ��������˶���Ϣ�Ĵ�������Ĵ��ڹ��̾ͷ�������DispatchMessage()�����������Ǿ��ٴ�ѭ����

����windows������һ���dz���Ҫ�ĸ���.����Ĵ��ڹ��̲�������ϵͳ������ص��õ���ʵ��������DispatchMessage()���Լ���ӵص��������������Ը��������Զ���Ϣ����GetWindowLong()�õ����Ĵ��ڹ�����ֱ�ӵ�������

while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
    WNDPROC fWndProc = (WNDPROC)GetWindowLong(Msg.hwnd, GWL_WNDPROC);
    fWndProc(Msg.hwnd, Msg.message, Msg.wParam, Msg.lParam);
}

�����Ҷ�ǰ��������������ַ��������Թ����������кܶ�ķ������ַ����]��ע�⵽������Unicode/ANSIת�Q��ʱ�ӻص������ȵ������ܿ��������ǵļ������п��Թ������������¾Ϳ���������Ҫ��ʵ�ʵĴ�����������)

����ע��������GetWindowLong()���Ӵ������������Ĵ��ڹ�����Ϊʲô���Dz�ֱ�ӵ���WndProc()����Ϊ���ǵ���Ϣѭ��Ϊ���dz����е����д��ڵ���Ϣ������������ť���б�������ӵ���Լ��Ĵ��ڹ��̵Ĵ�������������Ҫ���ǵ�������ȷ�Ĵ��ڹ�������Ϊ������ڿ���ʹ��һ�����ڹ����� ��һ�����������ڵľ�������ߴ��ڹ���ij����Ϣ��Ϊ�Ǹ����ڵ���

��������Կ��������Ӧ�ó������Ҫʱ���������Ϣѭ�������ת����ܸ��˵�����Щ���ֵĴ��ڷ���Ϣ�����Ǵ����������Ҫ�˳���������ô������Ϊ����ʹ����һ��whileѭ�������GetMessage()������FLASE������0����ѭ���ͽ������ǾͿ��Ե�WinMain()�Ľ������������PostQuitMessage()���Ĺ�����������з���һ��WM_QUIT��Ϣ��GetMessage()����Msg�ṹ��������ݲ�����0��������������ֵ. ����ط���Msg��wParam��Ա�����㴫��PostQuitMessage()������������Ժ�������Ҳ���Դ�WinMain()���ص�������̵Ľ����룮

Ҫ�㣺GetMessage()��������󷵻أ�������Ҫ��ס��㣬˵�����Ĵ���������᷸����������ʹGetMessage()������Ϊ����һ��BOOLֵ�������ǻ᷵��TRUE��FLASE֮���ֵ����ΪBOOL������ΪUINT��unsigned int��������Ĵ�����ܿ������ɹ��������Dz�����ȷ����ijЩ��r��

    while(GetMessage(&Msg, NULL, 0, 0))
    while(GetMessage(&Msg, NULL, 0, 0) != 0)
    while(GetMessage(&Msg, NULL, 0, 0) == TRUE)

�����д�����Ǵ���ģ�������ע�⵽��������̳���ʹ���˵�һ�����ո��ᵽ�ˣ����GetMessage()��ʧ�ܣ�����������������Ҫ����ȷ�Ļ��Dz��������������Ҫ���ڶ����̳��Ļ��Ҳ������Դ���Ϊǰ�ᣬ��Ĵ�������кܶ����GetMessage()����ijЩ�������������д�����Ѿ������ˣ������©��ijЩ�ط���ԭ�£�

    while(GetMessage(&Msg, NULL, 0, 0) > 0)

Ӧ��ʼ��ʹ�����ӵ����ͬ��Ч���Ĵ�����

������ϣ�����windows��Ϣѭ�����˽�һ�����˽�������]��������������ʹ������һЩʱ���ͻ���������

Copyright © 1998-2008, Brook Miles (forgey). All rights reserved.