�������� Linux Tags

3. �Ӵ���ѶϢ

��ǰ���£���ʽʹ����ͬһ����ʽMessageBox����ʹ����������֡�MessageBox��ʽ�Ὠ��һ�����Ӵ�������Windows�У����Ӵ���һ����ȷ�еĺ��塣һ���Ӵ�����өĻ�ϵ�һ����������������ʹ���ߵ����벢�����ֻ�ͼ�εĸ�ʽ��ʾ������ݡ�

MessageBox��ʽ����һ���Ӵ�������ֻ��һ���������޵������Ӵ���ѶϢ�Ӵ���һ�����رհ�ť�ı����С�һ��ѡ��ͼʾ��һ�л�������֣��Լ�����ĸ���ť����Ȼ������ѡ��Windows�ṩ������ͼʾ�밴ť��

MessageBox��ʽ�dz����ã������治������ʹ���������Dz�����ѶϢ��������ʾͼ�Σ�����Ҳ������ѶϢ���������ӹ��ܱ���Ҫ������Щ���������Ҫ�����Լ����Ӵ������ھͿ�ʼ��

�Լ����Ӵ�
��

�����Ӵ��ܼ򵥣�ֻ�����CreateWindow��ʽ���ɡ�

��������Ȼ�����Ӵ��ĺ�ʽ��ȷ��ΪCreateWindow��������Ҳ����/Platform SDK/User Interface Services/Windowing/Windows/Window Reference/Window Functions�ҵ����ļ�������������CreateWindow�ĵ�һ������������ν�ġ��Ӵ�������ơ������Ҹ��Ӵ����������ν�ġ��Ӵ�ѶϢ������ʽ���������Ǻ���CreateWindow֮ǰ����һ�㱳��֪ʶ��������а�����

����ṹ
��

����Windows��ʽ��ƣ�ʵ�������ڽ���һ���������ij�ʽ��ƣ�OOP������һ����Windows��ʹ�õ���������ϱ�����Ϊ���ԡ������������Windows֮��������Ϊ��Windows����ԭ���������˸񻯵����磬�������ܻ����������г��֣�������Ǹ��������Ӵ����Ķ�����

�����������Ե��Ӵ�����Ӧ�ó�ʽ�Ӵ�����Щ�Ӵ�������ʾ��ʽ���Ƶı����С����ܱ��������ܻ��й����к;����С���һ���Ӵ��ǶԻ����飬�������б�����Ҳ����û�б����С�

װ�ζԻ��������Ļ��и�ʽ�����İ�������ѡ��ť����ȡ���顢�嵥���顢�����к�����������������ÿһ��С���Ӿ��������һ���Ӵ�����ȷ�е�˵����Щ����Ϊ�����Ӵ����򡸿������Ӵ��������Ӵ��������

��Ϊ�����ʹ���߻���өĻ�Ͽ�����Щ�Ӵ�����ͨ�����̺ͻ���ֱ�������ǽ��н�������������Ȥ���ǣ���ʽд���ߵĹ۵���ʹ���ߵĹ۵㼫�����ơ��Ӵ��ԡ�ѶϢ������ʽ�����Ӵ������룬�Ӵ�Ҳ��ѶϢ�������Ӵ�ͨѶ����ѶϢ�����⽫��ѧϰ���д��Windows��ʽ������Խ�����ϰ�֮һ��

����һ��Windows��ѶϢ����������֪�����������Windows��ʽ���д�С���ʵ�Ӧ�ó�ʽ�Ӵ���Ҳ����˵�����ܹ�ͨ�������϶��Ӵ��ı߿����ı��Ӵ��Ĵ�С��ͨ������ʽ��ͨ���ı��Ӵ��е���������Ӧ���ִ�С�ı仯�������ܻ�²⣨������Ҳ����ȷ�ģ�����Windows����������Ӧ�ó�ʽ�ڴ�����ʹ�������µ����Ӵ���С��ص�ȫ�����ҳ�ʽ�����Ӧ�ó�ʽ�ܸı�����ʾ�����ӣ�������Ҳ��֪�����Ӵ���С�ı��ˡ�

Ӧ�ó�ʽ�����֪��ʹ���߸ı����Ӵ��Ĵ�С���أ���춳�ʽд����ϰ��������������ģʽ��ʽ����ҵϵͳû�����ý�����ѶϢ֪ͨ��ʹ���ߵĻ��ơ�����Ĺؼ��������Windows��ʹ�õļܹ�����ʹ���߸ı��Ӵ��Ĵ�Сʱ��Window����ʽ����һ��ѶϢָ�����Ӵ��Ĵ�С��Ȼ���ʽ�Ϳ��Ե����Ӵ��е����ݣ��Ի�Ӧ��С�ı仯��

��Windows����ʽ����ѶϢ��������ϣ�����߲�Ҫ����仰�Ӷ������������ױ�����ʲô��˼�أ��������������۵��dz�ʽ�룬������һ�������ʼ�ϵͳ����ҵϵͳ��ô����ʽ����ѶϢ�أ�

��ʵ����ν��Windows����ʽ����ѶϢ������ָWindows���г�ʽ�е�һ����ʽ���ú�ʽ�IJ�������������ض�ѶϢ������λ�Windows��ʽ�еĺ�ʽ��Ϊ���Ӵ�ѶϢ������ʽ����

���ɣ����߶Գ�ʽ������ҵϵͳ�������Ǻ���Ϥ�ġ����磬��ʽ�ڴ򿪴�Ƭ����ʱ��Ҫʹ���йص�ϵͳ���С���������ϰ�ߵģ���������ҵϵͳ���г�ʽ����������Windows�������ܹ��Ļ�����

��ʽ������ÿһ���Ӵ�������ص��Ӵ�ѶϢ������ʽ������Ӵ�ѶϢ������ʽ��һ����ʽ���ȿ����ڳ�ʽ�У�Ҳ�����ڶ�̬�����ʽ���С�Windowsͨ�������Ӵ�ѶϢ������ʽ�����Ӵ�����ѶϢ���Ӵ�ѶϢ������ʽ���ݴ�ѶϢ���д�����Ȼ�Ὣ���ƴ��ظ�Windows��

��ȷ�е�˵���Ӵ�ͨ�����ڡ��Ӵ���𡹵Ļ����Ͻ����ġ��Ӵ�����ʶ�˴����Ӵ�ѶϢ���Ӵ�ѶϢ������ʽ��ʹ���Ӵ����ʹ����Ӵ��ܹ����ͬһ���Ӵ���𣬲�ʹ��ͬһ���Ӵ�ѶϢ������ʽ�����磬����Windows��ʽ�е����а�ť������ͬһ���Ӵ��������Ӵ������һ���������а�ťѶϢ���Ӵ�ѶϢ������ʽ��λ�Windows�Ķ�̬�����ʽ���У����ᡣ

���������ij�ʽ����У�����dz�ʽ�����ϵ���ϡ��Ӵ���һ����������ʽ���Ӵ�ѶϢ������ʽ���������Ӵ�ѶϢ������ʽ�������Ѷ��WindowsΪÿ���Ӵ��Լ�ϵͳ���Ǹ��Ӵ���𱣴����Ѷ��

�Ӵ�ѶϢ������ʽ�������Ӵ�����ѶϢ����ЩѶϢ�����Ǹ�֪�Ӵ���ʹ������ʹ�ü��̻��߻���������롣�����ǰ����Ӵ�֪�����������¡��İ������ڡ����Ӵ���С�ı䣬�����Ӵ�������Ҫ�ػ�ʱ��������ѶϢ֪ͨ�Ӵ���

Windows��ʽ��ʼִ���ᣬWindowsΪ�ó�ʽ����һ����ѶϢ���С������ѶϢ����������Ÿó�ʽ���ܽ����ĸ��ֲ�ͬ�Ӵ���ѶϢ����ʽ����һС�γ�ʽ�룬������ѶϢ��Ȧ����������������ȡ��ѶϢ�����ҽ����Ƿ��͸���Ӧ���Ӵ�ѶϢ������ʽ����ЩѶϢֱ�ӷ��͸��Ӵ�ѶϢ������ʽ�����÷���ѶϢ�����С�

����������Windows�ܹ���춼��Ե��������Ž��ɣ���������ȥ������ʵ�ʵij�ʽ�У��Ӵ����Ӵ�����Ӵ�ѶϢ������ʽ��ѶϢ���С�ѶϢ��Ȧ���Ӵ�ѶϢ������໥��ϵġ�������������Щ������

HELLOWIN��ʽ
��

����һ���Ӵ�������Ҫע��һ���Ӵ��������Ҫһ���Ӵ�ѶϢ������ʽ�������Ӵ�ѶϢ�������Ӵ�ѶϢ��ÿ��Windows��ʽ��������Щ��������ʽ3-1��ʾ��HELLOWIN��ʽ�������������������������Щ���顣

 ï¿½ï¿½Ê½3-1  HELLOWIN
HELLOWIN.C
/*------------------------------------------------------------------------
   	HELLOWIN.C -- Displays "Hello, Windows 98!" in client area
		      (c) Charles Petzold, 1998
 -----------------------------------------------------------------------*/

#include <windows.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
	static TCHAR szAppName[] = TEXT ("HelloWin") ;
	HWND	hwnd ;
	MSG	msg ;
	WNDCLAS	wndclass ;

 	wndclass.style		  = CS_HREDRAW | CS_VREDRAW ;
 	wndclass.lpfnWndProc  = WndProc ;
	wndclass.cbClsExtra	  = 0 ;
	wndclass.cbWndExtra	  = 0 ;
	wndclass.hInstance	  = hInstance ;
	wndclass.hIcon		  = LoadIcon (NULL, IDI_APPLICATION) ;
  	wndclass.hCursor	  = LoadCursor (NULL, IDC_ARROW) ;
 	wndclass.hbrBackground	= (HBRUSH) GetStockObject (WHITE_BRUSH) ;
  	wndclass.lpszMenuNam	= NULL ;
	wndclass.lpszClassName	= szAppName ;

	if (!RegisterClass (&wndclass))
     {
		MessageBox (	NULL, TEXT ("This program requires Windows NT!"), 
          				szAppName, MB_ICONERROR) ;
		return 0 ;
     }
	hwnd = CreateWindow( szAppName,	// window class name
			TEXT ("The Hello Program"),	// window caption
			WS_OVERLAPPEDWINDOW,	// window style
			CW_USEDEFAULT,	// initial x position
			CW_USEDEFAULT,	// initial y position
			CW_USEDEFAULT,	// initial x size
			CW_USEDEFAULT,	// initial y size
			NULL,			// parent window handle
		    NULL,	        // window menu handle
		    hInstance,	    // program instance handle
		    NULL) ; 	    // creation parameters
     
	ShowWindow (hwnd, iCmdShow) ;
	UpdateWindow (hwnd) ;
     
	while (GetMessage (&msg, NULL, 0, 0))
     {
		TranslateMessage (&msg) ;
  		DispatchMessage (&msg) ;
     }
	return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	HDC			hdc ;
	PAINTSTRUCT ps ;
	RECT		rect ;
     
	switch (message)
     {
	case WM_CREATE:
	PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;
		return 0 ;

	case 	WM_PAINT:
		hdc = BeginPaint (hwnd, &ps) ;
          
		GetClientRect (hwnd, &rect) ;
          
		DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,
			DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
  			EndPaint (hwnd, &ps) ;
			return 0 ;
          
	case	WM_DESTROY:
		PostQuitMessage (0) ;
		return 0 ;
     }
   return DefWindowProc (hwnd, message, wParam, lParam) ;
}

��ʽ����һ����ͨ��Ӧ�ó�ʽ�Ӵ�����ͼ3-1��ʾ�����Ӵ���ʾ�����������ʾ��Hello, Windows 98!���������װ����Ч������ô��������������Ӧ���ʶ�������


��

Click to view at full size.

ͼ3-1 HELLOWIN�Ӵ�

������ע�⣺�����ʹ��Microsoft Visual C++ Ϊ�˳�ʽ������ר������ô���ü��������ʽ����ij�ʽ�⵵������ Project ï¿½ï¿½ï¿½Ü±ï¿½Ñ¡ï¿½ï¿½ Setting Ñ¡ï¿½î£¬È»ï¿½ï¿½Ñ¡È¡ Link Ò³ï¿½ï¿½ï¿½Ç©ï¿½ï¿½ï¿½ï¿½ Category ï¿½åµ¥ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ñ¡ï¿½ï¿½ General ï¿½ï¿½È»ï¿½ï¿½ï¿½ï¿½ Object/Library Modules ï¿½ï¿½ï¿½Ö·ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ WINMM.LIB ï¿½ï¿½ Windows multimedia ï¿½ï¿½ Windows��ý�� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ÎªHELLOWIN��ʹ�ö�ý�幦�ܺ��У����ڶ���ר�����ֲ�������ý���ʽ�⵵������Ȼ�����ʽ�����˴�����Ѷ������PlaySound��ʽ�����á�

HELLOWIN����ȡ����HELLOWIN.WAV���õ����ڱ������������HELLOWINĿ¼�С�ִ��HELLOWIN.EXEʱ���ڶ���Ŀ¼������HELLOWIN����Visual C++��ִ�д˳�ʽʱ����Ȼִ�е��������HELLOWIN��RELEASE��DEBUG��Ŀ¼�У���ִ�г�ʽ��Ŀ¼���DZ�����HELLOWIN�С�

ͨ�̿���
��

ʵ���ϣ�ÿһ��Windows��ʽ���ж�����HELLOWIN.C��ʽ�Ĵ󲿷֡�û����������ס�˳�ʽ��ȫ��д����ͨ����Windows��ʽд�����ڿ�ʼдһ���³�ʽʱ���ǻḴ��һ�����еij�ʽ��Ȼ��������Ӧ���޸ġ������԰���ϰ������ʹ�ñ��鸽������еij�ʽ��

�����ᵽ��HELLOWIN�������Ӵ���������ʾ�ִ�������˵��������ȫ��ȷ�ġ�����ʵ����ʾ�ڳ�ʽ��ʾ��������룬����ͼ3-1���DZ����кͱ߽緶Χ�ڵĴ�Ƭ��ɫ�����������������˵����Ҫ����ʾ������dz�ʽ���ɻ�ͼ������ʹ������ʾ���������Ӵ�����

���������˼��һ�£����ᷢ����Ȼֻ��80�г�ʽ�룬����Ӵ�ȴ���˾��ȵؾ������๦�ܡ��������û���ס�����У���өĻ���ƶ��Ӵ������԰�ס��С�߿ò£¬¸Ä±ï¿½ï¿½Ó´ï¿½ï¿½Ä´ï¿½Ð¡ï¿½ï¿½ï¿½ï¿½ï¿½Ó´ï¿½ï¿½ï¿½Ð¡ï¿½Ä±ï¿½Ê±ï¿½ï¿½ï¿½ï¿½Ê½ï¿½Ô¶ï¿½ï¿½Ø½ï¿½ï¿½ï¿½Hello, Windows 98!���ִ����¶�λ����ʾ��������롣�����԰���󻯰�ť���Ŵ�HELLOWIN�Գ�������өĻ��Ҳ���԰���С����ť������ʽ��С��һ��ͼʾ����������ϵͳ���ܱ���ִ������ѡ����ǰ����ڱ���������˵�Сͼʾ����Ҳ���Դ�ϵͳ���ܱ���ѡ�� Close Ñ¡ï¿½î£¬ï¿½ï¿½ï¿½ßµï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ò¶ËµÄ¹Ø±Õ°ï¿½Å¥ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ë«ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ëµï¿½Í¼Ê¾ï¿½ï¿½ï¿½ï¿½ï¿½Ø±ï¿½ï¿½Ó´ï¿½ï¿½ï¿½ï¿½ï¿½Ö¹ï¿½ï¿½Ê½ï¿½ï¿½Ö´ï¿½Ð¡ï¿½

���ǽ��ڱ��µ����²��ֶԴ˳�ʽ��һ��ϸ�ļ�顣��Ȼ����������Ҫ�������Ͽ�һ�¡�

��ǰ�����еķ�����ʽһ����HELLOWIN.CҲ��һ��WinMain��ʽ��������������һ����ʽ����ΪWndProc��������Ӵ�ѶϢ������ʽ��ע�⣬��HELLOWIN.C��û�к���WndProc�ij�ʽ�롣��Ȼ����WinMain���ж�WndProc�IJο���������Ǹú�ʽҪ�ڳ�ʽ��ͷ���������ԭ��

Windows��ʽ����
��

HELLOWIN���ٺ�����18��Windows��ʽ��������������HELLOWIN�г��ֵĴ����г���Щ��ʽ�Լ����Եļ���������

  • LoadIcon ����ͼʾ����ʽʹ�á�
    ��
  • LoadCursor ���뻬���α깩��ʽʹ�á�
    ��
  • GetStockObject ȡ��һ��ͼ�����������������У���ȡ�û����Ӵ������Ļ�ˢ�������
    ��
  • RegisterClass Ϊ��ʽ�Ӵ�ע���Ӵ����
    ��
  • MessageBox ��ʾѶϢ���顣
    ��
  • CreateWindow �����Ӵ������һ���Ӵ���
    ��
  • ShowWindow ��өĻ����ʾ�Ӵ���
    ��
  • UpdateWindow ָʾ�Ӵ����Ҹ��¡�
    ��
  • GetMessage ��ѶϢ������ȡ��ѶϢ��
    ��
  • TranslateMessage ת��ijЩ����ѶϢ��
    ��
  • DispatchMessage ��ѶϢ���͸��Ӵ�ѶϢ������ʽ��
    ��
  • PlaySound ����һ����Ч������
    ��
  • BeginPaint ��ʼ�����Ӵ���
    ��
  • GetClientRect ȡ���Ӵ���ʾ����Ĵ�С��
    ��
  • DrawText ��ʾ�ִ���
    ��
  • EndPaint ���������Ӵ���
    ��
  • PostQuitMessage ��ѶϢ�����в���һ�����˳���ʽ��ѶϢ��
    ��
  • DefWindowProc ִ���ڶ���ѶϢ������
    ��

��Щ��ʽ����Platform SDK�ļ���˵�������ڲ�ͬ�ı�ͷ���������棬���о������������WINUSER.H�С�

��д��ĸʶ����
��

���߿���ע�⵽��HELLOWIN.C���м�����д��ʶ���֣���Щʶ��������Windows��ͷ�����ж���ġ���Щʶ���ֺ���������ĸ����������ĸ�����ף���Щ������ͷ����һ�����ߣ�

CS_HREDRAW DT_VCENTER SND_FILENAME
CS_VREDRAW IDC_ARROW WM_CREATE
CW_USEDEFAULT IDI_APPLICATION WM_DESTROY
DT_CENTER MB_ICONERROR WM_PAINT
DT_SINGLELINE SND_ASYNC WS_OVERLAPPEDWINDOW

��Щ�Ǽ򵥵���ֵ����������ָʾ�ó���������������3-1��ʾ��

��3-1
���� ���
CS �Ӵ������ʽ
CW �����Ӵ�
DT ��������
IDI ͼʾID
IDC �α�ID
MB ѶϢ����
SND ����
WM �Ӵ�ѶϢ
WS �Ӵ���ʽ

��Ȱ��ʽд���߲�Ҫ������ȥ����Windows��ʽ����е���ֵ������ʵ���ϣ�Windows��ʹ�õ�ÿ����ֵ�����ڱ�ͷ�����о�����Ӧ��ʶ���ֶ��塣

�µ�������̬
��

HELLOWIN.C�е�����ʶ�������µ�������̬��Ҳ��Windows��ͷ������ʹ��typedef��������#define�������Զ����ˡ������Ϊ�˱�춽�Windows��ʽ��ԭ����16λԪϵͳ����ֲ��δ����ʹ��32λԪ(��������)��������ҵϵͳ�ϡ��������������統ʱÿ�������������˳�����������ָ������������ȷ�ġ�

��ʱ��Щ�µ�������ֻ̬��Ϊ�˷�����д�����磬���WndProc�ĵڶ���������UINT������ֻ̬��һ��unsigned int ��������������������Windows 98�У�����һ��32λԪ��ֵ�����WinMain�ĵ�����������PSTR������̬��ָ��һ���ִ���ָ�꣬����һ��char *��

����������̬�ĺ��岻̫���ԡ����磬WndProc�ĵ����͵��ĸ������ֱ𱻶���ΪWPARAM��LPARAM����Щ���ֵ���Դ�е���ʷ��������Windows����16λԪϵͳʱ��WndProc�ĵ���������������Ϊһ��WORD������һ��16λԪ�� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Å¶ï¿½ ï¿½ï¿½unsigned short�������������ĸ�����������Ϊһ��LONG������һ��32λԪ�������ų��������Ӷ����������֡�PARAM��ǰ�������ǰ�����ס�W���͡�L������Ȼ����32λԪ��Windows�У�WPARAM������Ϊһ��UINT����LPARAM������Ϊһ��LONG�������C�е�long������̬��������Ӵ�ѶϢ������ʽ����������������32λԪ��ֵ����Ҳ���е���֣���ΪWORD������̬��Windows98����Ȼ������Ϊһ��16λԪ�� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ë¡ï¿½PARAM��ǰ�ġ�W�����е������ˡ�

WndProc��ʽ����һ����̬ΪLRESULT��ֵ����ֵ�򵥵ر�����Ϊһ��LONG��WinMain��ʽ��ָ����һ��WINAPI��̬���ڱ�ͷ�����ж��������Windows��ʽ����ָ��������̬������WndProc��ʽ��ָ��һ��CALLBACK��̬��������ʶ���ֶ�������Ϊ_stdcall����ʾ��Windows������ʹ���ߵ�Ӧ�ó�ʽ֮�䷢���ĺ�ʽ���еĺ��в������ݷ�ʽ��

HELLOWIN��ʹ����Windows��ͷ�����ж�����������Ͻṹ�����ǽ��ڱ�������������ۣ�����Щ���Ͻṹ���3-2��ʾ��

��3-2
�ṹ ����
MSG ѶϢ�ṹ
WNDCLASS �Ӵ����ṹ
PAINTSTRUCT ��ͼ�ṹ
RECT ���νṹ

ǰ���������Ͻṹ��WinMain��ʹ�ã��ֱ�����������Ϊmsg��wndclass�Ľṹ�������������Ͻṹ��WndProc��ʹ�ã��ֱ�����ps��rect�ṹ��

���ż��
��

���ᣬ����������дʶ���֣�����3-3������춲�ͬ��̬�ġ����š���

��3-3
ʶ���� ����
HINSTANCE ִ��ʵ�壨��ʽ����������
HWND �Ӵ�����
HDC װ�����ݴ���

������Windows��ʹ�÷dz�Ƶ�����ڱ��½���֮ǰ�����ǽ�����HICON��ͼʾ���ţ���HCURSOR�������α���ţ���HBRUSH����ˢ���ţ���

������һ����ͨ��Ϊ32λԪ�ģ�������������һ�������Windows�еĴ������ƴ�ͳC����MS-DOS��ʽ�����ʹ�õĵ������š���ʽ��������ͨ������Windows��ʽȡ�ô��š���ʽ������Windows��ʽ��ʹ��������ţ���ʹ������������������ŵ�ʵ��ֵ�Գ�ʽ��˵���޹ؽ�Ҫ�ġ����ǣ������ij�ʽ�ṩ���ŵ�Windowsģ��֪�������������ʹ�����Ӧ�������

��������ʾ��
��

���߿���ע�⵽��HELLOWIN.C����һЩ�����������ԵúܹŹ֡���szCmdLine�����Ǵ��ݸ�WinMain�IJ�����

����Windows��ʽд����ʹ��һ�ֽ�������������ʾ�����ı�������ͨ������Ϊ�˼�����Ե�Microsoft��ʽд����Charles Simonyi���dz��򵥣���������һ�����߶��Сд��ĸ��ʼ����Щ��ĸ��ʾ������������̬�����磬szCmdLine�е�sz��������0��β���ִ�������hInstance��hPrevInstance�е�h���ױ�ʾ�����š�����iCmdShow�е�i���ױ�ʾ���������� WndProc������������Ҳʹ����������ʾ������������ǰ���Ѿ����͹��ģ�����wParamӦ�ø��ʵ��ر�����ΪuiParam��������������������������������Ϊ������������ʹ��������̬WPARAM��LPARAM����ģ���˱������Ǵ�ͳ�����֡�

�������ṹ����ʱ�������ýṹ�������߽ṹ����һ����д����Сд��Ϊ�����������ף������������������������磬��HELLOWIN. C��WinMain��ʽ�У�msg������MSG��̬�Ľṹ��wndclass��WNDCLASSEX��̬��һ���ṹ����WndPmc��ʽ�У�ps��һ��PAINTSTRUCT�ṹ��rect��һ��RECT�ṹ��

��������ʾ���ܹ�������ʽд���߼��緢�ֲ������ʽ�еĴ�����춱������������˱��������ã�����������������̬���ͱȽ����ױ������������̬���ϵĴ���

��3-4�г����ڱ����о����õ��ı������ס�

��3-4
���� ������̬
c char��WCHAR��TCHAR
by BYTE ������������Ԫ��
n short
i int
x, y int�ֱ�����x�����y����
cx, cy int�ֱ�����x���Ⱥ�y���ȣ�C��������������
b��f BOOL (int)��f��������꡹
w WORD ���������Ŷ�������
l LONG ����������
dw DWORD ���������ų�������
fn function����ʽ��
s string���ִ���
sz ��λԪ��ֵ0��β���ִ�
h ����
p ָ��

ע���Ӵ����
��

�Ӵ�����ijһ�Ӵ���������Ӵ�������Ա�ʶ�����Ӵ�ѶϢ���Ӵ�ѶϢ������ʽ��

��ͬ�Ӵ���������ͬһ���Ӵ�����������磬Windows�е����а�ť�Ӵ���������������ȡ���飬�Լ���ѡ��ť����������ͬһ���Ӵ�������ġ��Ӵ���������Ӵ�ѶϢ������ʽ�����ݴ���������Ӵ����������硣�ڽ����Ӵ�ʱ��Ҫ����һЩ���Ӵ������е����硣

��Ϊ��ʽ�����Ӵ�֮ǰ���������Ⱥ���RegisterClassע��һ���Ӵ���𡣸ú�ʽֻ��Ҫһ����������һ��ָ����̬ΪWNDCLASS�Ľṹָ�ꡣ�˽ṹ��������ָ���ִ�����λ����˽ṹ��WINUSER.H��ͷ�����ж��������ֲ�ͬ�ķ�ʽ����һ����ASCII���WNDCLASSA��

typedef struct tagWNDCLASSA
{
	UINT	     style ;
	WNDPROC	     lpfnWndProc ;
	int 	     cbClsExtra ;
	int	         cbWndExtra ;
	HINSTANCE 	 hInstance ;
	HICON  	     hIcon ;
	HCURSOR 	 hCursor ;
	HBRUSH 	     hbrBackground ;
	LPCSTR  	 lpszMenuName ;
	LPCSTR  	 lpszClassName ;
}
WNDCLASSA, * PWNDCLASSA, NEAR * NPWNDCLASSA, FAR * LPWNDCLASSA ;

��������ʾһ��������̬����������ʾ�������е�lpfn���״�����ָ��ʽ�ij�ָ�꡹������Win32 API�У���ָ��Ͷ�ָ�꣨���߽���ָ�꣩û��������ֻ��16λԪWindows�������cb���״�����λԪ����������ͨ����Ϊһ����������ʾһ��λԪ��Ĵ�С��h������һ�����ţ���hbr���״�����һ����ˢ�Ĵ��š���lpsz���״�����ָ����0��β�ִ���ָ�꡹��

Unicode��Ľṹ�������£�

typedef struct tagWNDCLASSW 
{
     	UINT  		    style ;
     	WNDPROC     	lpfnWndProc ;
     	int         	cbClsExtra ;
     	int         	cbWndExtra ;
     	HINSTANCE   	hInstance ;
     	HICON       	hIcon ;
     	HCURSOR     	hCursor ;
     	HBRUSH      	hbrBackground ;
     	LPCWSTR     	lpszMenuName ;
     	LPCWSTR     	lpszClassName ;
}
WNDCLASSW, * PWNDCLASSW, NEAR * NPWNDCLASSW, FAR * LPWNDCLASSW ;

��ǰ��Ψһ�������������������λ����Ϊָ����ִ�������������ָ��ASCII�ִ�������

WINUSER.H������WNDCLASSA��WNDCLASSW�ṹ���Լ�ָ��ṹ��ָ�꣩���ᣬ��ͷ�������ݶ�UNICODEʶ���ֵĽ��ͣ�������WNDCLASS��ָ��WNDCLASS��ָ�꣨����һЩ�������ݵij�ʽ�룩��

#ifdef UNICODE
typedef 	WNDCLASSW 	    WNDCLASS ;
typedef 	PWNDCLASSW 	    PWNDCLASS ;
typedef 	NPWNDCLASSW 	NPWNDCLASS ;
typedef 	LPWNDCLASSW 	LPWNDCLASS ;
#else
typedef 	WNDCLASSA 	   WNDCLASS ;
typedef 	PWNDCLASSA 	   PWNDCLASS ;
typedef 	NPWNDCLASSA    NPWNDCLASS ;
typedef 	LPWNDCLASSA    LPWNDCLASS ;
#endif

���������г��ṹʱ����ֻ�г�������ͬ�Ľṹ���壬��WNDCLASS����������

typedef struct
{
    UINT        	style ;
	WNDPROC	        lpfnWndProc ;
	int		        cbClsExtra ;
	int 		    cbWndExtra ;
	HINSTANCE   	hInstance ;
	HICON       	hIcon ;
	HCURSOR     	hCursor ;
	HBRUSH      	hbrBackground ;
	LPCTSTR     	lpszMenuName ;
	LPCTSTR     	lpszClassName ;
}
WNDCLASS, * PWNDCLASS ;

��Ҳ��������˵��ָ��Ķ��塣һ����ʽд���ߵij�ʽ��Ӧ����Ϊʹ����LP��NPΪ���׵IJ�ָͬ����̬�������ҡ�

��WinMain��ΪWNDCLASS����һ���ṹ��ͨ����������

WNDCLASS wndclass ;

Ȼ�ᣬ��Ϳ��Գ�ʼ���ýṹ��10����λ��������RegisterClass��

��WNDCLASS�ṹ������Ҫ��������λ�ǵڶ���������һ�����ڶ�����λ(lpfnWndProc) �������������������������Ӵ���ʹ�õ��Ӵ�ѶϢ������ʽ��λַ����HELLOWIN.C�У������WndProc��ʽ������һ����λ���Ӵ������������ơ���ʽд���߿������ⶨ�������ơ���ֻ����һ���Ӵ��ij�ʽ�У��Ӵ��������ͨ���趨Ϊ��ʽ���ơ�

������λ��������ķ����������Ӵ�����һЩ���硣���������ο���WNDCLASS�ṹ�е�ÿ����λ��

����

wndclass.style = CS_HREDRAW | CS_VREDRAW ;

ʹ��C��λԪ���������ӽ�����������Ӵ������ʽ��ʶ���֡��ڱ�ͷ����WINUSER.H�У��Ѷ�����һ������CSΪ���׵�ʶ���֣�

#define 	CS_VREDRAW 	            0x0001
#define 	CS_HREDRAW  	        0x0002
#define 	CS_KEYCVTWINDOW 	    0x0004
#define 	CS_DBLCLKS  	        0x0008
#define 	CS_OWNDC    	        0x0020
#define 	CS_CLASSDC  	        0x0040
#define 	CS_PARENTDC 	        0x0080
#define 	CS_NOKEYCVT  	        0x0100
#define 	CS_NOCLOSE  	        0x0200
#define 	CS_SAVEBITS 	        0x0800
#define 	CS_BYTEALIGNCLIENT	    0x1000
#define 	CS_BYTEALIGNWINDOW 	    0x2000
#define 	CS_GLOBALCLASS 	        0x4000
#define 	CS_IME 	                0x00010000

���ÿ��ʶ���ֶ�������һ������ֵ������һ��λԪ��ֵ�����԰����ַ�ʽ�����ʶ����ͨ����Ϊ��λԪ��꡹��ͨ������ֻʹ���������Ӵ������ʽ��HELLOWIN���õ���������ʶ���ֱ�ʾ���������ݴ���������Ӵ���ÿ���Ӵ���ˮƽ�����С(CS_HREDRAW)���ߴ�ֱ�����С(CS_VREDRAW)�ı�֮�ᣬ�Ӵ�Ҫ��ȫ�ػ����ı�HELLOWIN���Ӵ���С�����Կ����ִ���Ȼ��ʾ���Ӵ������룬������ʶ����ȷ������һ�㡣�������Ǿͽ������Ӵ�ѶϢ������ʽ����ε�֪�����Ӵ���С�ı仯�ġ�

WNDCLASS�ṹ�ĵڶ�����λ�������������г�ʼ����

wndclass.lpfnWndProc = WndProc ;

��������������Ӵ������Ӵ�ѶϢ������ʽ�趨ΪWndProc����HELLOWIN.C�еĵڶ�����ʽ��������̽�������������Ӵ�������������Ӵ���ȫ��ѶϢ����C�����У��������ڽṹ��ʹ�ú�ʽ��ʱ�������ṩ����ָ��ʽ��ָ�ꡣ

����������λ������Ӵ����ṹ��Windows�ڲ�������Ӵ��ṹ��Ԥ��һЩ����ռ䣺

wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;

��ʽ���Ը�����Ҫ��ʹ��Ԥ���Ŀռ䡣HELLOWINû��ʹ�����ǣ������趨ֵΪ0�����򣬺���������ʾ����ָʾ��һ���������λ�������ɡ�Ԥ����λԪ�����������ڵ����µij�ʽCHECKER3��ʹ��cbWndExtra��λ����

��һ����λ���dz�ʽ��ִ��ʵ����ţ���Ҳ��WinMain�IJ���֮һ����

wndclass.hInstance = hInstance ;

����

wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;

Ϊ������������Ӵ���������Ӵ�����һ��ͼʾ��ͼʾ��һ��С�ĵ���ͼͼ������ʹ���ߴ�����ʽ����������Windows�������к��Ӵ��ı����е���ˡ��ڱ�������棬����ѧϰ���Ϊ����Windows��ʽ�Զ�ͼʾ�����ڣ�Ϊ�˷�����������ǽ�ʹ��Ԥ�ȶ����ͼʾ��

Ҫȡ��Ԥ�ȶ���ͼʾ�Ĵ��ţ����Խ���һ�������趨ΪNULL������LoadIcon���������ʽд�����Զ���ͼʾʱ��ͼʾӦ�ô���ڴ�Ƭ�ϵ�.EXE��ʽ�����У����������Ӧ�ñ��趨Ϊ��ʽ��ִ��ʵ�����hInstance���ڶ�����������ͼʾ�����Ԥ�ȶ���ͼʾ���˲�������IDI��ʼ��ʶ���֣���ID����ͼʾ������ʶ������WINUSER.H�ж��塣IDI_APPLICATIONͼʾ��һ���򵥵��Ӵ�Сͼ�Ρ�LoadIcon��ʽ���ظ�ͼʾ�Ĵ��š����Dz�������������ŵ�ʵ��ֵ����ֻ�������hIcon��λԪ��ֵ������λ��WNDCLASS�ṹ�ж���ΪHICON��̬������̬���ĺ���Ϊ��handle to an icon��ͼʾ���ţ�����

����

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;

��ǰһ�������dz����ơ�LoadCursor��ʽ����һ��Ԥ�ȶ���Ļ����α꣨����ΪIDC_ARROW���������ظ��α�Ĵ��š��ô��ű��趨��WNDCLASS�ṹ��hCursor��λ���������α������������������Ӵ�����ʾ�����ϳ���ʱ�������һ��С��ͷ��

��һ����λָ�����������������Ӵ�������ɫ��hbrBackground��λ�����е�hbr���״�����handle to a brush����ˢ���ţ�������ˢ�Ǹ���ͼ�ʻ㣬ָ�������һ���������ɫ��ʽ��Windows�м�����׼��ˢ��Ҳ��Ϊ������(stock)����ˢ��������ʾ��GetStockObject���н�����һ����ɫ��ˢ�Ĵ��ţ�

wndclass.hbrBackground = GetStockObject (WHITE_BRUSH) ;

����ζ���Ӵ���ʾ����ı�����ȫΪ��ɫ������һ�ּ����ձ��������

��һ����λָ���Ӵ�����ܱ���HElLOWINû��Ӧ�ó�ʽ���ܱ������Ը���λ���趨ΪNULL��

wndclass.lpszMenuName = NULL ;

���ᣬ�������һ��������ơ����С��ʽ��������ƿ������ʽ����ͬ���������szAppName�����еġ�HelloWin���ִ���

wndclass.lpszClassName = szAppName ;

��춸��ִ���ASCII��Ԫ��ɻ���Unicode��Ԫ��ɣ�ȡ����Ƿ�����UNICODEʶ���֡�

�ڳ�ʼ���ýṹ��10����λ�ᣬHELLOWIN����RegisterClass��ע������Ӵ���𡣸ú�ʽֻ��һ����������ָ��WNDCLASS�ṹ��ָ�ꡣʵ���ϣ�RegisterClassA��ʽ�����һ��ָ��WNDCLASSA�ṹ��ָ�꣬��RegisterClassW��ʽ�����һ��ָ��WNDCLASSW�ṹ��ָ�ꡣ��ʽҪʹ���ĸ���ʽ��ע���Ӵ����ȡ��춷��͸��Ӵ���ѶϢ����ASCII���ֻ���Unicode���֡�

������һ�����⣺����ö����UNICODEʶ���ֱ����˳�ʽ����ʽ������RegisterClassW���ó�ʽ������Microsoft Windows NT��ִ�����á�������˳�ʽ��Windows 98��ִ�У�RegisterClassW��ʽ��δ��ر�ִ�е�����ʽ��һ������㣬����ʽ������ֻ����0���������󡣶����Windows 98��ִ�е�Unicode��ʽ��˵������һ��֪ͨʹ���������Ⲣ��ִֹ�еĺû��ᡣ���DZ����ж�����ʽ����RegisterClass��ʽ���еķ�����

if (!RegisterClass (&wndclass))
{
	MessageBox (	NULL, TEXT ("This program requires Windows NT!"), 
  			szAppName, MB_ICONERROR) ;
	return 0 ;
}

���MessageBoxW�ǿ���Windows 98������ִ�еļ���Unicode��ʽ֮һ��������ִ��������

��Ȼ����γ�ʽ�ٶ�RegisterClass������Ϊ����ԭ�������ʧ�ܣ�����WNDCLASS�ṹ��lpfnWndProc��λ���趨��NULL֮��Ĵ���GetLastError��ʽ�������ȷ��������������²��������ԭ��GetLastError��Windows�г��õĺ�ʽ���������ں�ʽ����ʧ��ʱ��ø��������Ѷ����ͬ��ʽ���ļ���ָ�����Ƿ��ܹ���GetLastError�������Щ��Ѷ����Windows 98�к���RegisterClassWʱ��GetLastError������120����WINERROR.H�������Կ�����ֵ120��ʶ����ERROR_CALL_NOT_IMPLEMENTED��ȡ���Ҳ������/Platform SDK/Windows Base Services/Debugging and Error Handling/Error Codes/System Errors - Numerical Order�鿴����

һЩWindows��ʽд����ϲ��������п��ܷ�������ĺ�ʽ���еĴ���ֵ����ô��ȷʵ�е������������Ҳ�dz�ϰ�������ü�����������󡣶�����Windows��ʽ��Ҫ���ü����塣���磬RegisterClass��Ҫ���ü����壬�Ա����Ӵ�������Ѷ�����һ��������Ӧ��Ҫ��������ʽ��ִ�н������һ����˵����������RegisterClass���ܵõ�����Ҫ�ļ����壬�����������ʧ�ܣ���Windows���Ҳ�쵱���ˡ�

�ڱ���ķ�����ʽ�У����������ٵĴ����顣�ⲻ����Ϊ����Ϊ�����鲻��һ���÷�����������Ϊ����������ڳ�ʽ�����з��ġ�

���ᣬһ���Ͼ����ǣ���һЩWindows������ʽ�У���������WinMain�п������³�ʽ�룺

if (!hPrevInstance)
{
	wndclass.cbStyle = CS_HREDRAW | CS_VREDRAW ;

 		��ʼ������ wndclass

	RegisterClass (&wndclass) ;
}

���dz�춡���ϰ�Ѹġ���ԭ����16λԪ��Windows�У��������������ִ�еij�ʽ��һ����ִ��ʵ�壬WinMain��hPrevInstance��������ǰһ��ִ��ʵ���ִ��ʵ����š�Ϊ��ʡ�����壬��������ִ��ʵ��Ϳ��ܻṲ����ͬ���Ӵ�����������Ӵ�����ֻ��hPrevInstance��NULL��ʱ���ע�ᣬ�������ʽû������ִ��ʵ�塣

��32λԪ��Windows�У�hPrevInstance����NULL���˳�ʽ�������ִ�У���ʵ����Ҳû��Ҫ���hPrevInstance��

�����Ӵ�
��

�Ӵ���������Ӵ���һ�����磬��˿���ʹ��ͬһ�Ӵ���������಻ͬ���Ӵ���ʵ�ʺ���CreateWindow�����Ӵ�ʱ������ָ���й��Ӵ��ĸ���ϸ����Ѷ��

Windows��ʽ���������ʱ������Ӵ������Ӵ�֮��������Լ�Ϊʲôһ���Ӵ����������粻�ܱ�һ���趨�á�ʵ���ϣ������ַ�ʽ�ֿ���Щ��ʽ��Ѷ�Ƿdz�����ġ����磬���еİ�ť�Ӵ�����������ͬ�����Ӵ������������������Ӵ������ص��Ӵ�ѶϢ������ʽλ�Windows�ڲ������Ӵ��������������ť�ļ��̺ͻ������룬�����尴ť��өĻ�ϵ�������󡣴���һ�㿴�������еİ�ť������ͬ���ķ�ʽ�����ġ����Dz������еİ�ť����һ���ġ����ǿ����в�ͬ�Ĵ�С����ͬ��өĻλ�ã��Լ���ͬ���ִ������������һЩ�������Ӵ������һ���֣��������Ӵ������ġ�

���ݸ�RegisterClass��ʽ����Ѷ����һ�����Ͻṹ���趨�ã������ݸ�CreateWindow��ʽ����Ѷ���ں�ʽ�����IJ������趨�á�������HELLOWIN.C�е�CreateWindows���У�ÿһ����λ������������˵����

hwnd = CreateWindow (szAppName, 	// window class name
	TEXT (	"The Hello Program"), 	// window caption
		WS_OVERLAPPEDWINDOW,	    // window style
      	CW_USEDEFAULT,	            // initial x position
       	CW_USEDEFAULT,	            // initial y position
		CW_USEDEFAULT, 	            // initial x size
  		CW_USEDEFAULT,	            // initial y size
		NULL,    	                // parent window handle
 		NULL,	                    // window menu handle
    	hInstance, 	                // program instance handle
    	NULL) ;  	                // creation parameters

������Ҳ�����ʵ������CreateWindowA��ʽ��CreateWindowW��ʽ��������ʽ�ֱ�ǰ������������ASCII����Unicode�ִ���������

���Ϊ��window class name���IJ�����szAppName���������ִ���HelloWin�������dz�ʽע����Ӵ�������ơ���������ǽ������Ӵ������Ӵ����ķ�ʽ��

�˳�ʽ�������Ӵ���һ����ͨ���ص�ʽ�Ӵ���������һ�������У������������һ��ϵͳ���ܱ���ť���������ұ�����С���Ŵ�͹ر�ͼʾ�����ܻ���һ����ʾ�Ӵ���С�ı߿����DZ�׼��ʽ���Ӵ�����ΪWS_OVERLAPPEDWINDOW��������CreateWindow�ġ��Ӵ���ʽ�������С������һ��WINUSER.H�������ᷢ�ִ���ʽ�Ǽ���λԪ������ϣ�

#define 	WS_OVERLAPPEDWINDOW (WS_OVERLAPPED	| \
      		WS_CAPTION 		                    | \
     		WS_SYSMENU 		                    | \
      		WS_THICKFRAME		                | \
     		WS_MINIMIZEBOX 		                | \
     		WS_MAXIMIZEBOX)

���Ӵ����⡹����ʾ�ڱ������е����֡�

ע������initial x position���͡�initial y position���IJ���ָ�����Ӵ����Ͻ�����өĻ���Ͻǵij�ʼλ�á������Щ����ʹ��CW_USEDEFAULTʶ���֣�ָʾWindowsʹ���ص��Ӵ����ڶ�λ�á���CW_USEDEFAULT����Ϊ0x80000000�����ڶ�����£�Windows���ζ��½������Ӵ���λ��ʹ���Ӵ����ϽǵĴ�ֱ��ˮƽ������өĻ�ϰ�һ���Ĵ�С������������ƣ�ע������initial x size���͡�initial y size���IJ����ֱ�ָ���Ӵ��Ŀ��Ⱥ͸߶ȡ�ͬ��ʹ����CW_USEDEFAULTʶ���֣�����ϣ��Windowsʹ���ڶ��ߴ硣

�ڽ���һ�������ϲ㡹�Ӵ�����Ӧ�ó�ʽ�Ӵ�ʱ��ע��Ϊ�����Ӵ����š��IJ����趨ΪNULL��ͨ��������Ӵ�֮������и��ӹ�ϵ�������Ӵ����dz����ڸ��Ӵ������档Ӧ�ó�ʽ�Ӵ������������Ӵ������棬������Ϊ����CreateWindow���ҳ������Ӵ��Ĵ��š�

��Ϊ�Ӵ�û�й��ܱ������ԡ��Ӵ����ܱ����š�Ҳ�趨ΪNULL������ʽִ��ʵ����š��趨Ϊִ��ʵ����ţ�������ΪWinMain�IJ������ݸ������ʽ�ġ����ᣬ������������ָ���趨ΪNULL�����������������ȡ�����ʽ�п������õ������ϡ�

CreateWindow���ر��������Ӵ��Ĵ��ţ��ô��Ŵ���ڱ���hwnd�У����߱�����ΪHWND��̬�����Ӵ�������̬������Windows�е�ÿ���Ӵ�����һ�����ţ���ʽ�ô�����ʹ���Ӵ�������Windows��ʽ��Ҫʹ��hwnd��Ϊ������������Windows����֪����ʽ������ĸ��Ӵ��ġ����һ����ʽ�����������Ӵ�����ÿ���Ӵ�����һ�����š��Ӵ�������Windows��ʽ����������Ҫ�Ĵ���֮һ��

��ʾ�Ӵ�
��

��CreateWindow���д���֮�ᣬWindows�ڲ��Ѿ�����������Ӵ��������˵��Windows�Ѿ�������һ������壬����������CreateWindow������ָ���Ӵ���ȫ����Ѷ��һЩ������Ѷ����Windows������������Ӵ������ҵ���Щ��Ѷ�ġ�

Ȼ�������������ӣ��Ӵ��������������Ѷ��ʾ���ϡ�������Ҫ������ʽ���У�һ���ǣ�

ShowWindow (hwnd, iCmdShow) ;

��һ�������Ǹո���CreateWindow�������Ӵ����š��ڶ�����������Ϊ��������WinMain��iCmdShow����ȷ����������өĻ����ʾ�Ӵ�����һ���С����С��������󻯡��ڿ�ʼ���ܱ��а�װ��ʽʱ��ʹ���߿����������ѡ������Ӵ���һ���С��ʾ����ôWinMain���յ��ᴫ�ݸ�ShowWindow�ľ���SW_SHOWNORMAL������Ӵ��������ʾ�ģ���ΪSW_SHOWMAXIMIZED��������Ӵ�ֻ��ʾ�ڹ������ϣ�����SW_SHOWMINNOACTIVE��

ShowWindow��ʽ����ʾ������ʾ�Ӵ������ShowWindow�ĵڶ���������SW_SHOWNORMAL�����Ӵ�����ʾ����ͻᱻ�Ӵ�����ж���ı�����ˢ�����ǡ���ʽ����

UpdateWindow (hwnd) ;

���ػ���ʾ���������ɷ��͸��Ӵ�ѶϢ������ʽ����HELLOWIN.C�е�WndProc��ʽ��һ��WM_PAINTѶϢ������һ�㡣���棬���ǽ�˵��WndProc��δ������ѶϢ��

ѶϢ��Ȧ
��

����UpdateWindow֮�ᣬ�Ӵ��ͳ�������Ѷ��ʾ���ϡ���ʽ���ڱ���׼������ʹ�����ü��̺ͻ�����������ϡ�WindowsΪ��ǰִ�е�ÿ��Windows��ʽά��һ����ѶϢ���С����ڷ��������¼�֮�ᣬWindows���¼�ת��Ϊһ����ѶϢ������ѶϢ�����ʽ��ѶϢ�����С�

��ʽͨ��ִ��һ���֮Ϊ��ѶϢ��Ȧ���ij�ʽ���ѶϢ������ȡ��ѶϢ��

while	(GetMessage (&msg, NULL, 0, 0))
{
	TranslateMessage (&msg) ;
	DispatchMessage (&msg) ;
}

msg��������̬ΪMSG�Ľṹ����̬MSG��WINUSER.H�ж������£�

typedef struct tagMSG 
{
	HWND	hwnd ;
	UINT	message ;
	WPARAM 	wParam ;
	LPARAM 	lParam ;
	DWORD  	time ;
	POINT  	pt ;
}
MSG, * PMSG ;

POINT������̬Ҳ��һ���ṹ������WINDEF.H�ж������£�

typedef struct tagPOINT
{
	LONG  x ;
	LONG  y ;
}
POINT, * PPOINT;

ѶϢ��Ȧ��GetMessage���п�ʼ������ѶϢ������ȡ��һ��ѶϢ��

GetMessage (&msg, NULL, 0, 0)

��һ���д���Windowsһ��ָ�ָ꣬����Ϊmsg��MSG�ṹ���ڶ��������͵��ĸ������趨ΪNULL����0����ʾ��ʽ�������Լ������������Ӵ�������ѶϢ��Windows�ô�ѶϢ������ȡ������һ��ѶϢ�����ѶϢ�ṹ�ĸ�����λ���ṹ�ĸ�����λ������

  • hwnd ����ѶϢ���Ӵ����š���HELLOWIN��ʽ�У���һ������CreateWindow���ص�hwndֵ��ͬ����Ϊ���Ǹó�ʽӵ�е�Ψһ�Ӵ���
    ��
  • message ѶϢʶ���֡�����һ����ֵ�����Ա�ʶѶϢ�����ÿ��ѶϢ������һ����Ӧ��ʶ���֣���Щʶ���ֶ����Windows��ͷ���������д������WINUSER.H����������WM����window message�����Ӵ�ѶϢ����ͷ�����磬ʹ���߽������α����HELLOWIN��ʾ����֮�ڣ������»�����ť��Windows����ѶϢ�����з���һ��ѶϢ����ѶϢ��message����WM_LBUTTONDOWN������һ����������ֵΪ0x0201��
    ��
  • wParam һ��32λԪ�ġ�message parameter��ѶϢ�����������京�����ֵ����ѶϢ�IJ�ͬ����ͬ��
    ��
  • lParam һ��32λԪ��ѶϢ��������ֵ��ѶϢ�йء�
    ��
  • time ѶϢ����ѶϢ�����е�ʱ�䡣
    ��
  • pt ѶϢ����ѶϢ����ʱ�Ļ������ꡣ
    ��

ֻҪ��ѶϢ������ȡ��ѶϢ��message��λ��ΪWM_QUIT����ֵΪ0x0012����GetMessage�ʹ���һ������ֵ��WM_QUITѶϢ������GetMessage����0��

����

TranslateMessage (&msg) ;

��msg�ṹ����Windows������һЩ����ת�����������һ�㣬���ǽ��ڵ��������������ۡ���

����

DispatchMessage (&msg) ;

�ֽ�msg�ṹ�ش���Windows��Ȼ�ᣬWindows����ѶϢ���͸��ʵ����Ӵ�ѶϢ������ʽ���������д�������Ҳ����˵��Windows�������Ӵ�ѶϢ������ʽ����HELLOWIN�У�����Ӵ�ѶϢ������ʽ����WndProe��ʽ��������ѶϢ֮�ᣬWndProc���ص�Windows����ʱ��Windows��ͣ����DispatchMessage�����С��ڽ���DispatchMessage���еĴ���֮�ᣬWindows�ص�HELLOWIN�����ҽ�������һ��GetMessage���п�ʼѶϢ��Ȧ��

�Ӵ�ѶϢ������ʽ
��

�������������۵Ķ��DZ�Ҫ�ĸ�����ע���Ӵ���𣬽����Ӵ���Ȼ����өĻ����ʾ�Ӵ�����ʽ����ѶϢ��Ȧ��Ȼ�᲻�ϴ�ѶϢ������ȡ��ѶϢ��������

ʵ�ʵĶ����������Ӵ�ѶϢ������ʽ�С��Ӵ�ѶϢ������ʽȷ�������Ӵ�����ʾ��������ʾЩʲô�Լ��Ӵ�������Ӧʹ�������롣

��HELLOWIN�У��Ӵ�ѶϢ������ʽ������ΪWndProc�ĺ�ʽ���Ӵ�ѶϢ������ʽ������������ֻҪ�󲻺��������ַ�����ͻ����һ��Windows��ʽ���԰�������Ӵ�ѶϢ������ʽ��һ���Ӵ�ѶϢ������ʽ���������RegisterClassע����ض��Ӵ�����������CreateWindow��ʽ�����ض��Ӵ������һ���Ӵ���������һ���Ӵ���𣬿��Խ�������Ӵ���

�Ӵ�ѶϢ������ʽ���Ƕ���Ϊ������ʽ��

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

ע�⣬�Ӵ�ѶϢ������ʽ���ĸ�������MSG�ṹ��ǰ�ĸ���λ����ͬ�ġ���һ������hwnd�ǽ���ѶϢ���Ӵ��Ĵ��ţ�����CreateWindow��ʽ�Ĵ���ֵ��ͬ�������HELLOWIN���Ƶij�ʽ��ֻ����һ���Ӵ�������������dz�ʽ��֪����Ψһ�Ӵ����š������ʽ������ͬһ�Ӵ����ͬʱҲ��ͬһ�Ӵ�ѶϢ������ʽ����������Ӵ�����hwnd��ʶ����ѶϢ���ض��Ӵ���

�ڶ���������MSG�ṹ�е�message��λ��ͬ�����DZ�ʶѶϢ����ֵ������������������32λԪ��ѶϢ�������ṩ���ѶϢ�ĸ�����Ѷ����Щ��������ÿ��ѶϢ��̬����ϸ��Ѷ����ʱѶϢ���������������һ���16λԪֵ������ʱѶϢ��������һ��ָ���ִ������Ͻṹ��ָ�ꡣ

��ʽͨ����ֱ�Ӻ����Ӵ�ѶϢ������ʽ���Ӵ�ѶϢ������ʽͨ����Windows�������С�ͨ������SendMessage��ʽ����ʽ�ܹ�ֱ�Ӻ������Լ����Ӵ�ѶϢ������ʽ�����ǽ���������½�����SendMessage��ʽ��

����ѶϢ
��

�Ӵ�ѶϢ������ʽ�����ܵ�ÿ��ѶϢ������һ����ֵ����ʶ�ģ�Ҳ���Ǵ����Ӵ�ѶϢ������ʽ��message������Windows��ͷ����WINUSER.HΪÿ��ѶϢ���������ԡ�WM�����Ӵ�ѶϢ��Ϊ���׿�ͷ��ʶ���֡�

һ����˵��Windows��ʽд����ʹ��switch��case�ṹ��ȷ���Ӵ�ѶϢ������ʽ���յ���ʲôѶϢ���Լ�����ʵ��ش��������Ӵ�ѶϢ������ʽ�ڴ���ѶϢʱ�����봫��0���Ӵ�ѶϢ������ʽ���账��������ѶϢӦ�ñ�������ΪDefWindowProc��Windows��ʽ����DefWindowProc���ص�ֵ�������Ӵ�ѶϢ������ʽ���ء�

��HELLOWIN�У�WndProcֻѡ��������ѶϢ��WM_CREATE��WM_PAINT��WM_DESTROY���Ӵ�ѶϢ������ʽ�Ľṹ���£�

switch (iMsg)
{
case	WM_CREATE :
  	����WM_CREATEѶϢ
	return 0 ;
          
case	WM_PAINT :
 	����WM_PAINTѶϢ
	return 0 ;
          
case	WM_DESTROY :
	����WM_DESTROYѶϢ
	return 0 ;
}
return DefWindowProc (hwnd, iMsg, wParam, lParam) ;

����DefWindowProc��Ϊ�Ӵ�ѶϢ������ʽ���账��������ѶϢ�ṩ�ڶ����������Ǻ���Ҫ�ġ���Ȼһ�㶯��������ֹ��ʽ������������ִ�С�

����������
��

�Ӵ�ѶϢ������ʽ���յĵ�һ��ѶϢ��Ҳ��WndProcѡ�����ĵ�һ��ѶϢ����WM_CREATE����Windows��WinMain�д���CreateWindow��ʽʱ��WndProc�������ѶϢ������˵����HELLOWIN����CreateWindowʱ��Windows����һЩ���������Ĺ���������Щ�����У�Windows����WndProc������һ�������趨Ϊ�Ӵ����ţ��ڶ��������趨ΪWM_CREATE��WndProc����WM_CREATEѶϢ�������ƴ��ظ�Windows�� WindowsȻ����Դ�CreateWindow�����д��ص�HELLOWIN�У�������WinMain�н�����һ���Ĵ�����

ͨ�����Ӵ�ѶϢ������ʽ��WM_CREATE�����ڼ����һ���Ӵ���ʼ����HELLOWIN�����ѶϢ�Ĵ����в���һ����ΪHELLOWIN.WAV����Ч��������ʹ�ü򵥵�PlaySound��ʽ��������һ�㡣�ú�ʽ˵����/Platform SDK/Graphics and Multimedia Services/Multimedia Audio/Waveform Audio�У����ļ���/Platform SDK/Graphics and Multimedia Services/Multimedia Reference/Multimedia Functions�С�

PlaySound�ĵ�һ����������Ч���������ƣ���Ҳ��������Control Panel��Sounds�ж����һ�������ı�����������һ����ʽ��Դ�����ڶ�������ֻ�е���Ч������һ����Դʱ�ű�ʹ�á�����������ָ��һЩѡ�����������У���ָ����һ��������һ�������������ҷ�ͬ���ز�����������PlaySound��ʽ��������Ч������ʼ����ʱ�������أ�������ȴ�������ɡ������ַ����£���ʽ�ܹ�������ʼ����

WndProcͨ�����Ӵ�ѶϢ������ʽ�д���0������������WM_CREATE�Ĵ�����

WM_PAINTѶϢ
��

WndProc�����ĵڶ���ѶϢΪWM_PAINT�����ѶϢ��Windows��ʽ������Ǻ���Ҫ�ġ����Ӵ���ʾ�����һ������ʾ���ݻ���ȫ����Ϊ����Ч��������춱��롸���»��桹ʱ���������ѶϢ֪ͨ��ʽ��

��ʾ�������ʾ������ô������Ч�أ�����������Ӵ���ʱ��������ʾ��������Ч�ģ���Ϊ��ʽ��û�����Ӵ��ϻ�ʲô��������һ��WM_PAINTѶϢ��ͨ��������WinMain�к���UpdateWindowʱ��ָʾ�Ӵ�ѶϢ������ʽ����ʾ�����ϻ�һЩ������

��ʹ���߸ı�HELLOWIN�Ӵ��Ĵ�С�ᣬ��ʾ�������ʾ�������±����Ч������Ӧ�û��ǵã�HELLOWIN��wndclass�ṹ��style��λ�趨Ϊ��־CS_HREDRAW��CS_VREDRAW�������ĸ�ʽ�趨ָʾWindows�����Ӵ���С�ı��ᣬ�Ͱ������Ӵ���ʾ���ݵ�����Ч��Ȼ�ᣬ�Ӵ�ѶϢ������ʽ���յ�һ��WM_PAINTѶϢ��

��ʹ���߽�HELLOWIN��С����Ȼ���ٴν��Ӵ��ָ�Ϊ��ǰ�Ĵ�Сʱ��Windows�����ᱣ����ʾ��������ݡ���ͼ�λ����£��Ӵ���ʾ�����漰���������ܴ���ˣ�Windows���Ӵ���Ч���Ӵ�ѶϢ������ʽ����һ��WM_PAINTѶϢ�����Զ��ָ����Ӵ������ݡ�

���ƶ��Ӵ��������໥�ص�ʱ��Windows������һ���Ӵ��б���һ���Ӵ����ڸǵ����ݡ�����һ���ֲ��ٱ��ڸ�֮�ᣬ���ͱ���־Ϊ��Ч���Ӵ�ѶϢ������ʽ���յ�һ��WM_PAINTѶϢ���Ը����Ӵ������ݡ�

��WM_PAINT�Ĵ����������Ǵ�һ��BeginPaint���п�ʼ��

hdc = BeginPaint (hwnd, &ps) ;

����һ��EndPaint���н�����

EndPaint (hwnd, &ps) ;

�������������У���һ���������dz�ʽ���Ӵ����ţ��ڶ���������ָ����̬ΪPAINTSTRUCT�Ľṹָ�ꡣPAINTSTRUCT�ṹ�а���һЩ�Ӵ�ѶϢ������ʽ����������������ʾ��������ݡ����ǽ�����һ�������۸ýṹ�ĸ�����λ����������ֻ��BeginPaint��EndPaint��ʽ���õ�����

��BeginPaint�����У������ʾ����ı�����δ��ɾ��������Windows��ɾ������ʹ��ע���Ӵ�����WNDCLASS�ṹ��hbrBackground��λ��ָ���Ļ�ˢ��ɾ����������HELLOWIN�У� ����һ����ɫ���û�ˢ������ζ����Windows��ͨ�����Ӵ������趨Ϊ��ɫ��ɾ���Ӵ�������BeginPaint������������ʾ������Ч��������һ����װ�����ݴ��š���װ��������ָʵ������豸������Ѷ��ʾ��������װ��������ʽ�����Ӵ�����ʾ������ʾ���ֺ�ͼ����Ҫװ�����ݴ��š����Ǵ�BeginPaint���ص�װ�����ݴ��Ų�������ʾ����֮���ͼ�����߿�����һ�ԡ�EndPaint�ͷ�װ�����ݴ��ţ�ʹ֮������Ч��

����Ӵ�ѶϢ������ʽ������WM_PAINTѶϢ�����Ǻܺ����ģ������DZ��뱻���͸�DefWindowProc��DefWindowProcֻ�����κ���BeginPaint��EndPaint����ʹ��ʾ������Ч��

������BeginPaint֮�ᣬWndProc��������GetClientRect��

GetClientRect (hwnd, &rect) ;

��һ�������dz�ʽ�Ӵ��Ĵ��š��ڶ���������һ��ָ�ָ꣬��һ��RECT��̬��rectangle�ṹ���ýṹ���ĸ�LONG��λ���ֱ�Ϊleft��top��right��bottom��GetClientRect�����ĸ���λ�趨Ϊ�Ӵ���ʾ����ijߴ硣left��top��λͨ���趨Ϊ0��right��bottom��λ�趨Ϊ��ʾ����Ŀ��Ⱥ͸߶ȣ�ͼԪ��������

WndProc���˽���RECT�ṹָ����ΪDrawText�ĵ��ĸ����������⣬���ٶ���������������

DrawText (	hdc, TEXT ("Hello, Windows 98!"), -1, &rect,
      		DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;

DrawText����������֣�������������������һ��������춸ú�ʽҪ������֣���һ�������Ǵ�BeginPaint���ص�װ�����ݴ��ţ��ڶ���������Ҫ��������֣������������� -1��ָʾ�ִ�����λԪ��0�ս�ġ�

DrawText����һ��������һϵ��λԪ��꣬���Ǿ���WINUSER.H�ж��壨��Ȼ�������ʾ�����Ч����ʹ��DrawText��һ��GDI��ʽ���У�����ȷʵ��Ϊ�൱�߼��Ļ�ͼ���ܶ���ΪUserģ���һ���֡��˺�ʽ��/Platform SDK/Graphics and Multimedia Services/GDI/Fonts and Text��˵���������ָʾ�����ֱ�����ʾ��һ���ϣ�ˮƽ����ʹ�ֱ����λ춵��ĸ�����ָ���ľ������롣��ˣ������ʽ���н����ִ���Hello, Windows 98!����ʾ����ʾ��������롣

һ����ʾ��������Ч�������ڸı��Сʱ�����������һ������WndProc�ͽ��յ�һ���µ�WM_PAINTѶϢ��WndProcͨ������GetClientRectȡ�ñ仯����Ӵ���С���������Ӵ���������ʾ���֡�

WM_DESTROYѶϢ
��

WM_DESTROYѶϢ����һ����ҪѶϢ����һ��ѶϢָʾ��Windows���ڸ���ʹ���ߵ�ָʾ�ر��Ӵ�����ѶϢ��ʹ���ߵ���Close��ť�����ڳ�ʽ��ϵͳ���ܱ���ѡ�� Closeʱ�����ģ��ڱ��µ����棬���ǽ���ϸ����WM_DESTROYѶϢ�������Ч�ģ���

HELLOWINͨ������PostQuitMessage�Ա�׼��ʽ��ӦWM_DESTROYѶϢ��

PostQuitMessage (0) ;

�ú�ʽ�ڳ�ʽ��ѶϢ�����в���һ��WM_QUITѶϢ��ǰ���ᵽ����GetMessage��춳���WM_QUIT֮��Ĵ�ѶϢ������ȡ��������ѶϢ�����ط�0ֵ������GetMessage�õ�һ��WM_QUITѶϢʱ��������0���⽫����WinMain�˳�ѶϢ��Ȧ������ֹ��ʽ��Ȼ���ʽִ�������������

return msg.wParam ;

�ṹ��wParam��λ�Ǵ��ݸ�PostQuitMessage��ʽ��ֵ��ͨ����0����Ȼ��return�������˳�WinMain����ֹ��ʽ��

WINDOWS��ʽ��Ƶ��ѵ�
��

��ʹ���˶�HELLOWIN��˵�������߶Գ�ʽ�Ľṹ��ԭ��������Ȼ�������ء���Ϊ��ͳ������д�򵥵�C��ʽʱ��������ʽ���ܰ�����main��ʽ�С�����HELLOWIN�У�WinMainֻ������ע���Ӵ���𣬽����Ӵ�����ѶϢ������ȡ��ѶϢ�ͷ���ѶϢ������ij�ʽ�롣

��ʽ������ʵ�ʶ��������Ӵ�ѶϢ������ʽ�з�������HELLOWIN�У���Щ�������࣬WndProcֻ�Ǽ򵥵ز�����һ����Ч���������Ӵ�����ʾһ���ִ���������������½��У����߽����֣�Windows��ʽ������һ�У����ǻ�Ӧ���͸��Ӵ�ѶϢ������ʽ��ѶϢ�����Ǹ����ϵ���Ҫ�ѵ�֮һ���ڿ�ʼд��Windows��ʽ֮ǰ�������ȸ������

������ң��һ������
��

ǰ�������ᵽ������ʽд�����Ѿ���Ϥ��ʹ����ҵϵͳ���е����������磬C��ʽд����ʹ��fopen��ʽ�򿪵�����fopen��ʽ����ͨ��������ҵϵͳ���򿪵�������һ������Ҳû�С�

����Windows��ͬ������Windows��1000�����ϵĺ�ʽ�ɹ���ʽ���У���WindowsҲ����ʹ���߳�ʽ������ǰ�涨����Ӵ�ѶϢ������ʽWndProc���Ӵ�ѶϢ������ʽ���Ӵ������أ��Ӵ�����dz�ʽ����RegisterClassע��ġ����ݸ���������Ӵ�ʹ������Ӵ�ѶϢ������ʽ�������Ӵ�������ѶϢ��Windowsͨ�������Ӵ�ѶϢ������ʽ���Ӵ�����ѶϢ��

�ڵ�һ�ν����Ӵ�ʱ��Windows����WndProc�����Ӵ��ر�ʱ��WindowsҲ����WndProc���Ӵ��ı��С���ƶ����߱��ͼʾʱ���ӹ��ܱ���ѡ��ijһ��Ŀ��Ų�������С����»���ť���ߴӼ���������Ԫʱ���Լ��Ӵ���ʾ������뱻����ʱ��Windows��Ҫ����WndProc��

������ЩWndProc���ж���ѶϢ����ʽ���С��ڴ����Windows��ʽ�У���ʽ����Ҫ���ֶ���������ѶϢ��Windows���Է��͸��Ӵ�ѶϢ������ʽ��ѶϢͨ������WM��ͷ�����ֱ�ʶ�����Ҷ���WINUSER.H��ͷ�����ж��塣

ʵ���ϣ��ӳ�ʽ����г�ʽ�ڵij�ʽ��һ���������ڴ�ͳ�ij�ʽ����в���ǰ��δ�š�C�е�signal��ʽ��������Ctrl-C�жϻ���ҵϵͳ�������жϡ�ΪMS-DOS��д���ϳ�ʽ�о���������Ӳ���жϵij�ʽ�롣

����Windows�У����ָ�����չΪ����һ���¼����Ӵ��з�����һ�ж���ѶϢ����ʽ�����Ӵ�ѶϢ������ʽ��Ȼ�ᣬ�Ӵ�ѶϢ������ʽ��ij�ַ�ʽ��Ӧ���ѶϢ�����߽�ѶϢ����DefWindowProc�������ڶ�������

��HELLOWIN�У��Ӵ�ѶϢ������ʽ��wParam��lParam����������Ϊ���ݸ�DefWindowProc�IJ����⣬�����������ô�����Щ���������˹��ѶϢ��������Ѷ�������ĺ��������ѶϢ��ء�

����������һ�����ӡ�һ���Ӵ�����ʾ�����С�����˸ı䣬Windows�ͺ����Ӵ����Ӵ�ѶϢ������ʽ���Ӵ�ѶϢ������ʽ��hwnd�����Ǹı��С���Ӵ��Ĵ��ţ����ס��һ���Ӵ�ѶϢ������ʽ�ܴ�������ͬһ���Ӵ�������Ķ���Ӵ���ѶϢ������hwnd���Ӵ�ѶϢ������ʽ֪�����ĸ��Ӵ��ڽ���ѶϢ��������message��WM_SIZE��ѶϢWM_SIZE�IJ���wParam��ֵ��SIZE_RESTORED��SIZE_MINIMIZED��SIZE_MAXIMIZED��SIZE_MAXSHOW��SIZE_MAXHIDE ����WINUSER.H��ͷ�����зֱ���Ϊ����0��4����Ҳ����˵������wParam�����Ӵ��Ƿ���С�����Ƿ���󻯣�����С������󻯣��������ء�

lParam�������������Ӵ��Ĵ�С���¿��Ⱥ��¸߶Ⱦ�Ϊ16λԪֵ������һ���Ϊ32λԪ��lParam��WINDEF.H���ṩ�˰�����ʽд���ߴ�lParam��ȡ��������ֵ�ľ޼������ǽ�����һ��˵������޼���

��ʱ��DefWindowProc������ѶϢ������������ѶϢ�����磬����ʹ����ִ��HELLOWIN������ʹ�������յ����� Close ï¿½ï¿½Å¥ï¿½ï¿½ï¿½ï¿½ï¿½ß¼ï¿½ï¿½ï¿½ï¿½Ã¼ï¿½ï¿½Ì»ï¿½ï¿½ï¿½ï¿½ÏµÍ³ï¿½ï¿½ï¿½Ü±ï¿½ï¿½ï¿½Ñ¡ï¿½ï¿½ï¿½ï¿½ Close ï¿½ï¿½ DefWindowProc������һ���̻��߻������룬�ڼ�⵽ʹ����ѡ���� Close Ñ¡ï¿½ï¿½Ö®ï¿½á£¬ï¿½ï¿½ï¿½ï¿½ï¿½Ó´ï¿½Ñ¶Ï¢ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ê½ï¿½ï¿½ï¿½ï¿½Ò»ï¿½ï¿½WM_SYSCOMMANDѶϢ��WndProc�����ѶϢ����DefWindowProc��DefWindowProc���Ӵ�ѶϢ������ʽ����һ��WM_CLOSEѶϢ����Ӧ֮��WndProc�ٴν�������DefWindowProc��DestroyWindow����DestroyWindow����Ӧ����WM_CLOSEѶϢ��DestroyWindow����Windows���Ӵ�ѶϢ������ʽ����һ��WM_DESTROYѶϢ��WndProc�ٺ���PostQuitMessage����һ��WM_QUITѶϢ����ѶϢ�����У��Դ�����Ӧ��ѶϢ�����ѶϢ����WinMain�е�ѶϢ��Ȧ��ֹ��Ȼ���ʽ������

���л�ѶϢ������л�ѶϢ
��

�����Ѿ�̸������Windows���Ӵ�����ѶϢ������ζ��Windows�����Ӵ�ѶϢ������ʽ�����ǣ�Windows��ʽҲ��һ��ѶϢ��Ȧ��������GetMessage��ѶϢ������ȡ��ѶϢ�����Һ���DispatchMessage��ѶϢ���͸��Ӵ�ѶϢ������ʽ��

��ô��Windows��ʽ�����εȴ�ѶϢ����������ͨ��ʽ����ͬ�ļ������룩��Ȼ�ὫѶϢ�͵�ij�ط�ȥ���𣿻��ߣ�����ֱ�Ӵӳ�ʽ�������ѶϢ����ʵ���ϣ�������������ڡ�

ѶϢ�ܹ�����Ϊ�����л��ġ��͡������л��ġ������л���ѶϢ����Windows�����ʽѶϢ�����еġ��ڳ�ʽ��ѶϢ��Ȧ�У����´��ز�������Ӵ�ѶϢ������ʽ�������л���ѶϢ��Windows�����Ӵ�ʱֱ���͸��Ӵ�ѶϢ������ʽ��Ҳ����˵�����л���ѶϢ�������͡���ѶϢ���У��������л���ѶϢ�򡸷��͡����Ӵ�ѶϢ������ʽ���κ�����£��Ӵ�ѶϢ������ʽ��������Ӵ����е�ѶϢ--�������л��ĺͷ����л��ġ��Ӵ�ѶϢ������ʽ���Ӵ��ġ�ѶϢ���ġ���

���л�ѶϢ��������ʹ��������Ľ�����Ի�������WM_KEYDOWN��WM_KEYUPѶϢ����������������Ԫ��WM_CHAR���������ƶ���WM_MOUSEMOVE���ͻ���ť��WM_LBUTTONDOWN������ʽ���������л�ѶϢ������ʱ��ѶϢ��WM_TIMER��������ѶϢ��WM_PAINT�����˳�ѶϢ��WM_QUIT����

�����л�ѶϢ��������ѶϢ������������£������л�ѶϢ���Ժ����ض���Windows��ʽ�����磬��WinMain����CreateWindowʱ��Windows�������Ӵ����ڴ����и��Ӵ�ѶϢ������ʽ����һ��WM_CREATEѶϢ����WinMain����ShowWindowʱ��Windows�����Ӵ�ѶϢ������ʽ����WM_SIZE��WM_SHOWWINDOWѶϢ����WinMain����UpdateWindowʱ��Windows�����Ӵ�ѶϢ������ʽ����WM_PAINTѶϢ�����̻�������ʱ���������л�ѶϢ�źţ�Ҳ���ڷ����л�ѶϢ�г��֡����磬�ü��̻���ѡ����һ�����ܱ���ʱ�����̻���ѶϢ�������л��ģ���˵�����ܱ�����ѡ�е�WM_COMMANDѶϢ����ܾ��Ƿ����л��ġ�

��һ������Ȼ�ܸ��ӣ������˵��ǣ����еĴ󲿷�����Windows����ģ��������ǵij�ʽ���¡����Ӵ�ѶϢ������ʽ�ĽǶ���������ЩѶϢ����һ������ġ�ͬ���ķ�ʽ�����ġ��Ӵ�ѶϢ������ʽ���Դ������ǣ�Ҳ���Բ�������

����˵ѶϢ����һ�������ͬ���ķ�ʽ����ʱ������˵����ѶϢ��Ӳ����жϲ�ͬ����һ���Ӵ�ѶϢ������ʽ�д���ѶϢʱ����ʽ���ᱻ����ѶϢͻȻ�жϡ�

��ȻWindows��ʽ���Զ�ִ����ִ�У���ÿ��ִ������ѶϢ����ֻΪ�Ӵ�ѶϢ������ʽ�ڸ�ִ������ִ�е��Ӵ�����ѶϢ�����仰˵��ѶϢ��Ȧ���Ӵ�ѶϢ������ʽ���Dz���ִ�еġ���һ��ѶϢ��Ȧ����ѶϢ�����н���һ��ѶϢ��Ȼ�����DispatchMessage��ѶϢ���͸��Ӵ�ѶϢ������ʽʱ��ֱ���Ӵ�ѶϢ������ʽ�����ƴ��ظ�Windows��DispatchMessage���ܽ���ִ�С�

��Ȼ���Ӵ�ѶϢ������ʽ�ܺ��и��Ӵ�ѶϢ������ʽ������һ��ѶϢ�ĺ�ʽ����ʱ���Ӵ�ѶϢ������ʽ�����ں�ʽ���д���֮ǰ��ɶԵڶ���ѶϢ�Ĵ�������ʱ�Ӵ�ѶϢ������ʽ�����������ѶϢ�����磬���Ӵ��������UpdateWindowʱ��Windows�������Ӵ�ѶϢ������ʽ������WM_PAINTѶϢ���Ӵ�ѶϢ������ʽ����WM_PAINTѶϢ�������ᣬUpdateWindow���н��ѿ��ƴ��ظ��Ӵ�ѶϢ������ʽ��

��Ҳ����˵�Ӵ�ѶϢ������ʽ�����ǿ����롣�ڴ��������£��ⲻ��������⣬���dz�ʽд����Ӧ����ʶ����һ�㡣���磬���������Ӵ�ѶϢ������ʽ�д���һ��ѶϢʱ������һ����̬������Ȼ�������һ��Windows��ʽ���������ʽ����ʱ�������ܱ�֤�Ǹ�������ֵ����ԭ���Ǹ�����˵--�ܿ��������е�Windows��ʽ����������һ��ѶϢ�������Ӵ�ѶϢ������ʽ�ڴ������ѶϢʱ�ı��˸ñ�����ֵ����Ҳ���ڱ���Windows��ʽʱ����Щ������ѻ�ѡ�����رյ�ԭ��֮һ��

����������£��Ӵ�ѶϢ������ʽ���뱣������ѶϢ��ȡ�õ���Ѷ�����ڴ�����һ��ѶϢʱʹ����Щ��Ѷ����Щ��Ѷ���Դ������Ӵ��ľ�̬��static����������������С�

��Ȼ�����߽������漸�¶Դ���һ����������˽⣬��Ϊ�Ӵ�ѶϢ������ʽ�����������ѶϢ��

�ж�Ѹ��
��

Windows 98��Windows NT��������Ȩʽ�Ķ๤����������ζ����һ����ʽ�ڽ���һ�ʱ�乤��ʱ��Windows��������ʹ���߽������л�����һ����ʽ�С�����һ�����£�Ҳ�����ڵ�Windows��Խ���ǰ16λԪWindows�ĵط���

Ȼ�������Windows��Ƶķ�ʽ����������Ȩʽ�๤������������ϣ�������ӹ��������磬�������ij�ʽ����һ��������������ijһ��ѶϢ���ǵģ�ʹ���߿��Խ������л�����һ����ʽ������ȴ�޷������ij�ʽ�����κζ�����ʹ�����޷��ƶ����ij�ʽ�Ӵ�������������С�����ر�����ʲô����������������Ϊ�����Ӵ�ѶϢ������ʽ��æ춽���һ�ʱ�����ҵ�������ϲ������Ӵ�ѶϢ������ʽ��ִ�����Լ����ƶ������Ų�������ʵ����ȷʵ���������������DefWindowProc���ֵĹ����������뱻����Ϊ�����Ӵ�ѶϢ������ʽ��һ���֡�

������ij�ʽ�ڴ���ijЩѶϢʱ��Ҫ��ʱ�����ҵ�Ļ�������ѡ�����ڵڶ�ʮ������������Щ���������ø�������һЩ����ʹ��������Ȩʽ�๤�����У�Ҳ��Ӧ�������ij�ʽ����өĻ��һ�������������ʹ��������ģ����ǻ���Ϊ���ij�ʽ����bug������׼�Ķ�����˵������ûд�á������ʹ���߾��ó�ʽֻͣ��һ���ӾͰ�ȫ��ѶϢ�п����������ˡ�