windows»·¾³ÏÂ32λ»ã±àÓïÑÔ³ÌÐòÉè¼Æ-µÚ9ÕÂ
°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ£¬°´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ£¬°´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿£¡
¡ª¡ª¡ª¡ªÎ´ÔĶÁÍꣿ¼ÓÈëÊéÇ©ÒѱãÏ´μÌÐøÔĶÁ£¡
ÏÂÃæÏÈÀ´¿´Ò»¸öµØµØµÀµÀµÄWin32»ã±à´°¿Ú³ÌÐò¡£
2¡£¡¡FirstWindowÔ´´úÂë
¶ÁÕß¿ÉÒÔÔÚËù´ø¹âÅ̵ÄChapter04FirstWindowĿ¼ÖÐÕÒµ½Ô´´úÂ룬Ŀ¼ÀïÃæÓÐÁ½¸öÎļþ£¬ËüÃÇÊÇ»ã±àÔ´ÎļþFirstWindow¡£asmºÍnmake¹¤¾ßʹÓõÄmakefile£¬»ã±àÔ´³ÌÐòÈçÏ£º
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£386
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£model¡¡flat£»stdcall
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡option¡¡casemap£ºnone
£»¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·
£»¡¡Include¡¡Îļþ¶¨Òå
£»¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·
include¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡windows¡£inc
include¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡gdi32¡£inc
includelib¡¡¡¡¡¡¡¡¡¡¡¡¡¡gdi32¡£lib
include¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡user32¡£inc
includelib¡¡¡¡¡¡¡¡¡¡¡¡¡¡user32¡£lib
include¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡kernel32¡£inc
includelib¡¡¡¡¡¡¡¡¡¡¡¡¡¡kernel32¡£lib
£»¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·
£»¡¡Êý¾Ý¶Î
£»¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£data£¿
hInstance¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡dd¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£¿
hWinMain¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡dd¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£¿
¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡nst
szClassName¡¡¡¡¡¡¡¡¡¡¡¡db¡¡¡¡¡¡¡¡'MyClass'£»0
szCaptionMain¡¡¡¡¡¡¡¡db¡¡¡¡¡¡¡¡'My¡¡first¡¡Window¡¡£¡'£»0
szText¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡db¡¡¡¡¡¡¡¡'Win32¡¡Assembly£»¡¡Simple¡¡and¡¡powerful¡¡£¡'£»0
£»¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·
£»¡¡´úÂë¶Î
£»¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡de
£»¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·
£»¡¡´°¿Ú¹ý³Ì
£»¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·
_ProcWinMain¡¡¡¡¡¡¡¡¡¡proc¡¡¡¡uses¡¡ebx¡¡edi¡¡esi£»hWnd£»uMsg£»wParam£»lParam
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡local¡¡@stPs£ºPAINTSTRUCT
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡local¡¡@stRect£ºRECT
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡local¡¡@hDc
¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡eax£»uMsg
£»********************************************************************
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£if¡¡¡¡¡¡¡¡¡¡¡¡eax¡¡¡¡¡¡¡¡¡¡WM_PAINT
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡¡¡BeginPaint£»hWnd£»addr¡¡@stPs
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡¡¡¡¡@hDc£»eax
¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡¡¡GetClientRect£»hWnd£»addr¡¡@stRect
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡¡¡DrawText£»@hDc£»addr¡¡szText£»¡1£»
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡addr¡¡@stRect£»
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡DT_SINGLELINE¡¡or¡¡DT_CENTER¡¡or¡¡DT_VCENTER
¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡¡¡EndPaint£»hWnd£»addr¡¡@stPs
£»********************************************************************
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£elseif¡¡¡¡eax¡¡¡¡¡¡¡¡¡¡WM_CLOSE
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡¡¡DestroyWindow£»hWinMain
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡¡¡PostQuitMessage£»NULL
£»********************************************************************
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£else
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡¡¡DefWindowProc£»hWnd£»uMsg£»wParam£»lParam
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ret
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£endif
£»********************************************************************
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡xor¡¡¡¡¡¡¡¡¡¡¡¡eax£»eax
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ret
¡¡
_ProcWinMain¡¡¡¡¡¡¡¡¡¡endp
£»¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·
_WinMain¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡proc
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡local¡¡¡¡¡¡¡¡@stWndClass£ºWNDCLASSEX
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡local¡¡¡¡¡¡¡¡@stMsg£ºMSG
¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡GetModuleHandle£»NULL
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡hInstance£»eax
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡RtlZeroMemory£»addr¡¡@stWndClass£»sizeof¡¡@stWndClass
£»********************************************************************
£»¡¡×¢²á´°¿ÚÀà
£»********************************************************************
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡LoadCursor£»0£»IDC_ARROW
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡¡¡@stWndClass¡£hCursor£»eax
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡push¡¡¡¡¡¡¡¡¡¡hInstance
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡pop¡¡¡¡¡¡¡¡¡¡¡¡@stWndClass¡£hInstance
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡¡¡@stWndClass¡£cbSize£»sizeof¡¡WNDCLASSEX
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡¡¡@stWndClass¡£style£»CS_HREDRAW¡¡or¡¡CS_VREDRAW
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡¡¡@stWndClass¡£lpfnWndProc£»offset¡¡_ProcWinMain
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡¡¡@stWndClass¡£hbrBackground£»COLOR_WINDOW¡¡£«¡¡1
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡¡¡@stWndClass¡£lpszClassName£»offset¡¡szClassName
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡RegisterClassEx£»addr¡¡@stWndClass
£»********************************************************************
£»¡¡½¨Á¢²¢ÏÔʾ´°¿Ú
£»********************************************************************
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡CreateWindowEx£»WS_EX_CLIENTEDGE£»
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡offset¡¡szClassName£»offset¡¡szCaptionMain£»
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡WS_OVERLAPPEDWINDOW£»
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡100£»100£»600£»400£»
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡NULL£»NULL£»hInstance£»NULL
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mov¡¡¡¡¡¡¡¡¡¡¡¡hWinMain£»eax
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡ShowWindow£»hWinMain£»SW_SHOWNORMAL
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡UpdateWindow£»hWinMain
£»********************************************************************
£»¡¡ÏûϢѻ·
£»********************************************************************
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£while¡¡¡¡¡¡TRUE
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡¡¡GetMessage£»addr¡¡@stMsg£»NULL£»0£»0
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£break¡¡¡¡¡¡¡¡¡£if¡¡eax¡¡¡¡¡¡0
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡¡¡TranslateMessage£»addr¡¡@stMsg
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡¡¡DispatchMessage£»addr¡¡@stMsg
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£endw
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ret
¡¡
_WinMain¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡endp
£»¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·
start£º
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡call¡¡¡¡¡¡¡¡¡¡_WinMain
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡invoke¡¡¡¡¡¡ExitProcess£»NULL
£»¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·¡·
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡end¡¡¡¡¡¡¡¡¡¡¡¡start
¡¡
À´Ô´£ºµç×Ó¹¤Òµ³ö°æÉç¡¡×÷ÕߣºÂÞÔƱò¡¡ÉÏÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡»ØÊéÄ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ÏÂÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
ÉÏÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡»ØÊéÄ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ÏÂÒ»Ò³¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡
µÚ4Õ¡¡µÚÒ»¸ö´°¿Ú³ÌÐò
4¡£1¡¡¿ªÊ¼Á˽ⴰ¿Ú£¨3£©
¡¡¡¡¡¡¡¡
ÈÃÎÒÃÇ´ò¿ªÒ»¸öDOS´°¿Ú£¬Çл»µ½FistWindowËùÔÚµÄĿ¼£¬ÔËÐл·¾³ÉèÖõÄÅú´¦ÀíÎļþvar¡£bat£¬ÔÙ¼üÈënmake±àÒë³öFirstWindow¡£exe£¬Õâ¸ö³ÌÐòÖ»ÓÐ2¡¡560×Ö½Ú£¬ÔËÐк󴰿ڳöÀ´ÁË£¬Èçͼ4¡£3Ëùʾ¡£¶ÔÓÚÕâ¸ö´°¿Ú£¬Óû§¿ÉÒÔÍ϶¯±ß¿òÈ¥¸Ä±ä´óС¡¢°´±êÌâÀ¸Éϵİ´Å¥À´×î´ó»¯ºÍ×îС»¯£¬µ±¹â±êÒƵ½±ß¿òµÄʱºò£¬»á×Ô¶¯±ä³ÉË«¼ýÍ·¡¡×ÜÖ®£¬Õâ¸ö´°¿Ú°üÀ¨ÁËÒ»¸öµäÐÍ´°¿ÚµÄËùÓÐÌØÕ÷¡£
ͼ4¡£3¡¡¡¡FirstWindowµÄÔËÐнá¹û
½ÓÏÂÀ´¿ªÊ¼·ÖÎöÔ´´úÂ룬¿´ÁËÕâÈýÒ³¶àµÄÔ´´úÂ룬µÚÒ»¸ö¸Ð¾õÊÇʲô£¿ÊDz»ÊÇÏë³·ÍËÁË£¿±ÊÕ߸տªÊ¼±àWin32³ÌÐòµÄʱºò¾ÍÊÇÕâÖָоõ£¬¿ÉÄÜ90£¥µÄÈËÓÐͬÑùµÄ¸Ð¾õ£¬±ð¼±£¬¹ýÁËÕâÒ»¹Ø£¬Win32»ã±àµÄÈëÞͳɹ¦ÁËÒ»°ë£¬ËùÒÔǧÍòҪͦס£¡ÓиöÕñ·ÜÈËÐĵÄÏûÏ¢ÊÇ£¬Õâ¸ö³ÌÐòÊǴ󲿷ִ°¿Ú³ÌÐòµÄÄ£°å£¬ÒÔºóҪдһ¸öеijÌÐò£¬°ÑËü¿½±´¹ýÀ´ÔÙÍùÖмäÌíש¼ÓÍß¾ÍÊÇÁË£¬¹¦·òÒ»µã¶¼²»°×·Ñ¡£
ÏȾ²ÏÂÐÄÀ´·ÖÎöһϳÌÐòµÄ½á¹¹£¬»¹¿´µÃ¶®£¬ºÜºÃ£¡ÆäʵԴ³ÌÐòµÄ½á¹¹ÔÚµÚ3ÕÂÀïÒѾÁ˽â¹ýÁË£¬Ê×ÏÈÊÇ×¢ÊÍ¡¡Ä£Ê½¶¨Òå¡¡include¡¡¡¡¡£dataÊý¾Ý¶Î£¬¶¼Ã»ÓÐÎÊÌ⣬ÕâЩÒѾռȥÁ˽ü40ÐÐÁË£¬ºÃÁË£¬ÖÕÓÚÊǹؼüµÄ´úÂë¶ÎÁË£¬Í³¼Æһϣ¬Ö»Ê£80ÐдúÂëÁË¡£
·ÖÎöһϳÌÐòµÄ½á¹¹£¬·¢ÏÖÈë¿ÚÊÇstart£¬È»ºóÖ´ÐÐÁËÒ»¸ö_WinMain×Ó³ÌÐò£¬Íê³Éºó¾ÍÊdzÌÐòÍ˳öµÄº¯ÊýExitProcess£¬ÔÙ¿´_WinMainµÄ½á¹¹£¬Ç°ÃæÊÇ˳ÐòÏÂÀ´µÄ¼¸¸öAPI£º
GetModuleHandle¡¡¡ú¡¡RtlZeroMemory¡¡¡ú¡¡LoadCursor¡¡¡¡¡ú¡¡RegisterClassEx
¡ú¡¡CreateWindowEx¡¡¡ú¡¡ShowWindow¡¡¡ú¡¡UpdateWindow
´ÓÃû³ÆÉϾÍÄÜ¿´³öËüÃǵÄÓÃ;£¬ºÜÃ÷ÏÔ£¬´°¿ÚÊÇÔÚCreateWindowEx´¦½¨Á¢µÄ£¬ShowWindowÔòÊÇ°Ñ´°¿ÚÏÔʾÔÚÆÁÄ»ÉÏ£¬ÕâЩ´úÂëÊÇ´°¿ÚµÄ½¨Á¢¹ý³Ì¡£
½ÓÏÂÀ´£¬¾ÍÊÇÒ»¸öÓÉ3¸öAPI×é³ÉµÄÑ»·ÁË£º
GetMessage¡¡¡ú¡¡TranslateMessage¡¡¡ú¡¡DispatchMessage
ºÜÃ÷ÏÔ£¬ÕâÊǺÍÏûÏ¢ÓйصÄÑ»·£¬ÒòΪAPIÃû³ÆÖж¼´øÓÐMessage×ÖÑù£¬Èç¹ûÍ˳öÕâ¸öÑ»·£¬³ÌÐòÒ²¾Í½áÊøÁË£¬Õâ¸öÑ»·½Ð×öÏûϢѻ·¡£ÉèÖÃ_WinMain×Ó³ÌÐò²¢²»ÊDZØÐëµÄ£¬¿ÉÒÔ°Ñ_WinMainµÄËùÓдúÂë·Åµ½Ö÷³ÌÐòÖУ¬Ã»ÓÐÈκÎÓ°Ï죬֮ËùÒÔÕâÑùÖ»ÊÇΪÁ˽«ÕâÀïʹÓõıäÁ¿¶¨Òå³É¾Ö²¿±äÁ¿£¬ÕâÑù¿ÉÒÔ·½±ãÒÆÖ²¡£
¿´Á˳ÌÐòµÄÁ÷³Ì£¬ËƺõûÓÐʲôµØ·½Éæ¼°´°¿ÚµÄÐÐΪ£¬Èç¸Ä±ä´óСºÍÒƶ¯Î»ÖõĴ¦ÀíµÈ¡£ÔÙ¿´Ô´³ÌÐò£¬³ýÁË_WinMain£¬»¹ÓÐÒ»¸ö×Ó³ÌÐò_ProcWinMain£¬µ«³ýÁËÔÚWNDCLASSEX½á¹¹µÄ¸³ÖµÖÐÌáµ½¹ýËü£¬ºÃÏñ¾ÍûÓÐʲôµØ·½ÒªÓõ½Õâ¸ö×Ó³ÌÐò£¬ÆðÂëÔÚ×Ô¼º±àдµÄÔ´´úÂëÖÐûÓÐÈκÎÒ»¸öµØ·½µ÷ÓùýËü¡£
ÔÙ¿´_ProcWinMain£¬ËüÊÇÒ»¸ö·ÖÖ§½á¹¹´¦ÀíµÄ×Ó³ÌÐò£¬¹¦ÄÜÊǰѲÎÊýuMsgÈ¡³öÀ´£¬¸ù¾Ý²»Í¬µÄuMsgÖ´Ðв»Í¬µÄ´úÂ룬ÍêÁËÒÔºó¾ÍÍ˳öÁË£¬ÖмäҲûÓÐÈκζ«Î÷ºÍÖ÷³ÌÐòÓйØÁª¡£
µÚÒ»¸ö´°¿Ú³ÌÐò¾ÍÊÇÓÉÕâôÁ½¸öËƺõÊÇ·çÂíÅ£²»Ï༰µÄ²¿·Ö×é³ÉµÄ£¬µ«ËüȷʵÄܹ¤×÷£¬¶ÔÓÚд¹ßÁËDOS»ã±àµÄ³ÌÐòÔ±À´Ëµ£¬ÕâËƺõ²»¿ÉÀí½â¡£ÏÂÃæÀ´¿´¿´Õâôһ¸öÄ°Éú¶øÆæ¹ÖµÄ³ÌÐòÊÇÈçºÎ¹¤×÷µÄ¡£
3¡£¡¡´°¿Ú³ÌÐòµÄÔËÐйý³Ì
ÔÚÆÁÄ»ÉÏÏÔʾһ¸ö´°¿ÚµÄ¹ý³ÌÒ»°ãÓÐÒÔϲ½Ö裬Õâ¾ÍÊÇÖ÷³ÌÐòµÄ½á¹¹Á÷³Ì£º
£¨1£©µÃµ½Ó¦ÓóÌÐòµÄ¾ä±ú£¨GetModuleHandle£©¡£
£¨2£©×¢²á´°¿ÚÀࣨRegisterClassEx£©¡£ÔÚ×¢²á֮ǰ£¬ÒªÏÈÌîдRegisterClassExµÄ²ÎÊýWNDCLASSEX½á¹¹¡£
£¨3£©½¨Á¢´°¿Ú£¨CreateWindowEx£©¡£
£¨4£©ÏÔʾ´°¿Ú£¨ShowWindows£©¡£
£¨5£©Ë¢Ð´°¿Ú¿Í»§Çø£¨UpdateWindow£©¡£
£¨6£©½øÈëÎÞÏÞµÄÏûÏ¢»ñÈ¡ºÍ´¦ÀíµÄÑ»·¡£Ê×ÏÈ»ñÈ¡ÏûÏ¢£¨GetMessage£©£¬Èç¹ûÓÐÏûÏ¢µ½´ï£¬Ôò½«ÏûÏ¢·ÖÅɵ½»Øµ÷º¯Êý´¦Àí£¨DispatchMessage£©£¬Èç¹ûÏûÏ¢ÊÇWM_QUIT£¬ÔòÍ˳öÑ»·¡£
³ÌÐòµÄÁíÒ»°ë_ProcWinMain×Ó³ÌÐòÊÇÓÃÀ´´¦ÀíÏûÏ¢µÄ£¬Ëü¾ÍÊÇ´°¿ÚµÄ»Øµ÷º¯Êý£¨Callback£©£¬Ò²½Ð×ö´°¿Ú¹ý³Ì£¬Ö®ËùÒÔÊǻص÷º¯ÊýÊÇÒòΪËüÊÇÓÉWindows¶ø²»ÊÇÎÒÃÇ×Ô¼ºµ÷Óõģ¬ÎÒÃǵ÷ÓÃDispatchMessage£¬¶øDispatchMessageÔٻعýÀ´µ÷Óô°¿Ú¹ý³Ì¡£
ËùÓеÄÓû§²Ù×÷¶¼ÊÇͨ¹ýÏûÏ¢À´´«¸øÓ¦ÓóÌÐòµÄ£¬ÈçÓû§°´¼ü£¬Êó±êÒƶ¯£¬Ñ¡ÔñÁ˲˵¥ºÍÍ϶¯ÁË´°¿ÚµÈ£¬Ó¦ÓóÌÐòÖÐÓÉ´°¿Ú¹ý³Ì½ÓÊÕÏûÏ¢²¢´¦Àí£¬ÔÚÀý×Ó³ÌÐòÖоÍÊÇ_ProcWinMain¡£´°¿Ú¹ý³Ì¹¹ÔìÁËÒ»¸ö·ÖÖ§½á¹¹£¬¶ÔÓ¦²»Í¬µÄÏûÏ¢Ö´Ðв»Í¬µÄ´úÂ룬ËùÒÔÒ»¸öÓ¦ÓóÌÐòÖм¸ºõËùÓеŦÄÜ´úÂ붼¼¯ÖÐÔÚ´°¿Ú¹ý³ÌÀï¡£
´°¿Ú³ÌÐòÔËÐÐÖÐÏûÏ¢´«ÊäµÄÁ÷³Ì¿ÉÒÔÓÉͼ4¡£4À´±íʾ¡£
ÏÈÀ´¿´¿´Windows¶ÔÏûÏ¢µÄ´¦Àí¡£WindowsÔÚϵͳÄÚ²¿ÓÐÒ»¸öϵͳÏûÏ¢¶ÓÁУ¬µ±ÊäÈëÉ豸ÓÐËù¶¯×÷µÄʱºò£¬ÈçÓû§°´¶¯Á˼üÅÌ¡¢Òƶ¯ÁËÊó±ê£¬°´Ï»ò·Å¿ªÁËÊó±êµÈ£¬Windows¶¼»á²úÉúÏàÓ¦µÄ¼Ç¼·ÅÔÚϵͳÏûÏ¢¶ÓÁÐÀÈçͼ4¡£4ÖеļýÍ·aºÍbËùʾ£¬Ã¿¸ö¼Ç¼Öаüº¬ÏûÏ¢µÄÀàÐÍ¡¢·¢ÉúµÄλÖã¨ÈçÊó±êÔÚʲô×ø±êÒƶ¯£©ºÍ·¢ÉúµÄʱ¼äµÈÐÅÏ¢¡£
ͼ4¡£4¡¡¡¡´°¿Ú³ÌÐòµÄÔËÐйý³Ì
ͬʱ£¬WindowsΪÿ¸ö³ÌÐò£¨ÑϸñµØ˵ÊÇÿ¸öỊ̈߳©Î¬»¤Ò»¸öÏûÏ¢¶ÓÁУ¬Windows¼ì²éϵͳÏûÏ¢¶ÓÁÐÀïÏûÏ¢µÄ·¢ÉúλÖ㬵±Î»ÖÃλÓÚij¸öÓ¦ÓóÌÐòµÄ´°¿Ú·¶Î§ÄÚµÄʱºò£¬¾Í°ÑÕâ¸öÏûÏ¢ÅÉË͵½Ó¦ÓóÌÐòµÄÏûÏ¢¶ÓÁÐÀÈçͼ4¡£4ÖеļýÍ·cËùʾ¡£
µ±Ó¦ÓóÌÐò»¹Ã»ÓÐÀ´È¡ÏûÏ¢µÄʱºò£¬ÏûÏ¢¾ÍÔÝʱ±£ÁôÔÚÏûÏ¢¶ÓÁÐÀµ±³ÌÐòÖеÄÏûϢѻ·Ö´Ðе½GetMessageµÄʱºò£¬¿ØÖÆȨתÒƵ½GetMessageËùÔÚµÄUSER32¡£DLLÖУ¨¼ýÍ·1£©£¬USER32¡£DLL´Ó³ÌÐòÏûÏ¢¶ÓÁÐÖÐÈ¡³öÒ»ÌõÏûÏ¢£¨¼ýÍ·2£©£¬È»ºó°ÑÕâÌõÏûÏ¢·µ»ØÓ¦ÓóÌÐò£¨¼ýÍ·3£©¡£
Ó¦ÓóÌÐò¿ÉÒÔ¶ÔÕâÌõÏûÏ¢½øÐÐÔ¤´¦Àí£¬Èç¿ÉÒÔÓÃTranslateMessage°Ñ»ùÓÚ¼üÅÌɨÃèÂëµÄ°´¼üÏûϢת»»³É»ùÓÚASCIIÂëµÄ¼üÅÌÏûÏ¢£¬ÒÔºóÒ²»áÓõ½TranslateAccelerator°Ñ¼üÅÌ¿ì½Ý¼üת»»³ÉÃüÁîÏûÏ¢£¬µ«Õâ¸ö²½Öè²»ÊDZØÐèµÄ¡£
È»ºóÓ¦ÓóÌÐò½«´¦ÀíÕâÌõÏûÏ¢£¬µ«·½·¨²»ÊÇ×Ô¼ºÖ±½Óµ÷Óô°¿Ú¹ý³ÌÀ´Íê³É£¬¶øÊÇͨ¹ýDispatchMessage¼ä½Óµ÷Óô°¿Ú¹ý³Ì£¬DispatchµÄÓ¢Îĺ¬ÒåÊÇ¡°·ÖÅÉ¡±£¬Ö®ËùÒÔÊÇ¡°·ÖÅÉ¡±£¬ÊÇÒòΪһ¸ö³ÌÐò¿ÉÄܽ¨Óв»Ö¹Ò»¸ö´°¿Ú£¬²»Í¬µÄ´°¿ÚÏûÏ¢±ØÐë·ÖÅɸøÏàÓ¦µÄ´°¿Ú¹ý³Ì¡£µ±¿ØÖÆȨתÒƵ½USER32¡£DLLÖеÄDispatchMessageʱ£¬DispatchMessageÕÒ³öÏûÏ¢¶ÔÓ¦´°¿ÚµÄ´°¿Ú¹ý³Ì£¬È»ºó°ÑÏûÏ¢µÄ¾ßÌåÐÅÏ¢µ±×ö²ÎÊýÀ´µ÷ÓÃËü£¨¼ýÍ·5£©£¬´°¿Ú¹ý³Ì¸ù¾ÝÏûÏ¢ÕÒµ½¶ÔÓ¦µÄ·Ö֧ȥ´¦Àí£¬È»ºó·µ»Ø£¨¼ýÍ·6£©£¬Õâʱ¿ØÖÆȨ»Øµ½DispatchMessage£¬×îºóDispatchMessageº¯Êý·µ»ØÓ¦ÓóÌÐò£¨¼ýÍ·7£©¡£ÕâÑù£¬Ò»¸öÑ»·¾Í½áÊøÁË£¬³ÌÐòÓÖ¿ªÊ¼ÐÂÒ»ÂÖµÄGetMessage¡£
ÓиöºÜ³£¼ûµÄÎÊÌ⣺ΪʲôҪÓÉWindowsÀ´µ÷Óô°¿Ú¹ý³Ì£¬³ÌÐòÈ¡ÁËÏûÏ¢ÒÔºó×Ô¼º´¦Àí²»ÊǸü¼ò±ãÂð£¿ÊÂʵÉϲ¢·ÇÈç´Ë£¬Èç¹û³ÌÐò×Ô¼º´¦ÀíÏûÏ¢µÄ¡°·ÖÅÉ¡±£¬¾Í±ØÐë×Ô¼ºÎ¬»¤±¾³ÌÐòËùÊô´°¿ÚµÄÁÐ±í£¬µ±³ÌÐò½¨Á¢µÄ´°¿Ú²»Ö¹Ò»¸öµÄʱºò£¬Õâ¸ö¹¤×÷¾Í±äµÃ¸´ÔÓÆðÀ´£»ÁíÒ»¸öÔÒòÊÇ£º±ðµÄ³ÌÐòÒ²¿ÉÄÜÓÃSendMessageͨ¹ýWindowsÖ±½Óµ÷ÓÃÄãµÄ´°¿Ú¹ý³Ì£»µÚÈý¸öÔÒò£ºWindows²¢²»ÊÇ°ÑËùÓеÄÏûÏ¢¶¼·Å½øÏûÏ¢¶ÓÁУ¬ÓеÄÏûÏ¢ÊÇÖ±½Óµ÷Óô°¿Ú¹ý³Ì´¦ÀíµÄ£¬ÈçWM_SETCURSORµÈʵʱÐÔºÜÇ¿µÄÏûÏ¢£¬ËùÒÔ´°¿Ú¹ý³Ì±ØÐ뿪·Å¸øWindows¡£
Ó¦ÓóÌÐòÖ®¼äÒ²¿ÉÒÔ»¥·¢ÏûÏ¢£¬PostMessageÊÇ°ÑÒ»¸öÏûÏ¢·Åµ½ÆäËû³ÌÐòµÄÏûÏ¢¶ÓÁÐÖУ¬Èçͼ4¡£4ÖмýÍ·dËùʾ£¬Ä¿±ê³ÌÐòÊÕµ½ÁËÕâÌõÏûÏ¢¾Í°ÑËü·ÅÈë¸Ã³ÌÐòµÄÏûÏ¢¶ÓÁÐÈ¥´¦Àí£»¶øSendMessageÔòÔ½¹ýÏûÏ¢¶ÓÁÐÖ±½Óµ÷ÓÃÄ¿±ê³ÌÐòµÄ´°¿Ú¹ý³Ì£¨Èçͼ4¡£4ÖмýÍ·IËùʾ£©£¬´°¿Ú¹ý³Ì·µ»ØÒÔºó²Å´ÓSendMessage·