°®°®Ð¡ËµÍø > ÆäËûµç×ÓÊé > windows»·¾³ÏÂ32λ»ã±àÓïÑÔ³ÌÐòÉè¼Æ >

µÚ9ÕÂ

windows»·¾³ÏÂ32λ»ã±àÓïÑÔ³ÌÐòÉè¼Æ-µÚ9ÕÂ

С˵£º windows»·¾³ÏÂ32λ»ã±àÓïÑÔ³ÌÐòÉè¼Æ ×ÖÊý£º ÿҳ3500×Ö

°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·­Ò³£¬°´¼üÅÌÉ쵀 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·

·µ»ØĿ¼ ÉÏÒ»Ò³ ÏÂÒ»Ò³ »Øµ½¶¥²¿ ÔÞ£¨2£© ²È£¨2£©

Äã¿ÉÄÜϲ»¶µÄ