|
|
|
|
Win32·J½s±Ðµ{¥|
±z¬O²Ä
302ÓÂsÄýªÌ
¦³Ãöµøµ¡ªº°ò¥»ª¾ÃÑ
µøµ¡¬O¿Ã¹õ¤Wªº¯x§Î°Ï°ì¡C¤@Óµøµ¡¥i¥H±qÁä½L©ÎªÌ·Æ¹«±µ¨ü¥Î¤áªº¿é¤J¡A¨Ã¦b¨ä¤º³¡Åã¥Ü¹Ï§Î¿é¥X¡C¤@ÓÀ³¥Îµ{¦¡µøµ¡³q±`¥]§tµ{¦¡ªº¼ÐÃD±ø¡B¥\¯àªí¡BÃ䮨¡A±²¶b¡C¨ä¤¤¡A¹ï¸Ü¤è¶ô¤]¬O¤@ºØµøµ¡¡C¤£¦Pªº¬O¡A¹ï¸Ü¤è¶ôªí±³q±`¥]§t´XÓ¨ä¥Lµøµ¡¡AºÙ¤§¬°¡§¤lµøµ¡¡¨¡C³o¨Ç¤lµøµ¡ªº§Î¦¡¦³À£¤J«ö¶s¡B³æ¿ï«ö¶s¡B®Ö¨ú¤è¶ô¡B¤å¥»¿é¤J°Ï°ì¡B¦Cªí®Ø©M±²¶bµ¥¡C ¥Î¤á±N³o¨Çµøµ¡¬Ý¦¨¿Ã¹õ¤Wªºª«¥ó¡A¥i¥H³q¹L«ö¤U¤@Ó«ö¶s©ÎªÌºu°Ê¤@Ó±²¶b»P³o¨Çª«¥óª½±µ¥æ¤¬¡C
µøµ¡¥H¡§®ø®§¡¨ªº§Î¦¡±µ¦¬µøµ¡ªº¿é¤J¡Aµøµ¡¤]¥Î®ø®§»P¨ä¥Lµøµ¡³q°T¡C¤ñ¦p¦bµ{¦¡µøµ¡ªº¤j¤p§ïÅܮɡA¦r³B²z¾¹·|«·s®æ¦¡¤Æ¨ä¤¤ªº¤å¥»¡Cµøµ¡¤j¤p§ïÅܪº²Ó¸`¬O¥Ñ§@·~¨t²Î³B²zªº¡A¦ýµ{¦¡¯à°÷¦^À³³oÓ¨t²Î¥\¯à¡C·í¥Î¤á§ïÅܵøµ¡ªº¤j¤p®É¡AWindowsµ¹µ{¦¡µo°e¤@±ø®ø®§«ü¥X·sµøµ¡ªº¤j¤p¡CµM«á¡Aµ{¦¡´N¥i¥H½Õ¾ãµøµ¡¤¤ªº¤º®e¡A¥H¦^À³¤j¤pªºÅܤơCµ{¦¡³Ð«Øªº¨C¤@Óµøµ¡³£¦³¬ÛÃöªºµøµ¡¹Lµ{¡C¤]´N¬Oµ¹³oÓµøµ¡«ü©w¤@Ó¤lµ{¦¡¡]µøµ¡¹Lµ{¡^¡AWindows³q¹L½Õ¥Î¥¦¨Óµ¹µøµ¡µo°e®ø®§¡Cµøµ¡¹Lµ{¦A®Ú¾Ú¦¹®ø®§¶i¦æ³B²z¡AµM«á±N±±¨îªð¦^µ¹Windows¡C
µøµ¡¦b¡§µøµ¡Ãþ¡¨ªº°ò¦¤W³Ð«Øªº¡CWindows©w¸q¤F½T¬Ùªºµøµ¡¹Lµ{¡A¦pªG§A¹ï©Ò¦³ªº®ø®§³£ÅýWindows¦Û¤v³B²z¡A¨º»ò§A´N¯à±o¨ì¤@ӼзǪºµøµ¡¡A¦P¼Ë¡A§A¤]¥i¥H¿ï¾Ü³B²z¦Û¤v·P¿³½ìªº®ø®§¡A³o¼Ë¡A¬Û·í©ó²£¥Í¤F¤£¦Pªº¤lÃþ¡A¤]´N§Î¦¨¤F¤£¦PªºÀ³¥Îµ{¦¡¡C¦P¼Ë¡A¤lµøµ¡¤]¬O°ò©ó¦P¤@Óµøµ¡Ãþ¡A¨Ã¥B¨Ï¥Î¦P¤@Óµøµ¡¹Lµ{¡C¨Ò¦p¡A©Ò¦³Windows µ{¦¡¤¤ªº©Ò¦³«ö¶s³£°ò©ó¦P¤@µøµ¡Ãþ¡C³oÓµøµ¡Ãþ¦³¤@Ó³B²z©Ò¦³«ö¶s®ø®§ªºµøµ¡¹Lµ{¡A¦ý¬O¡A¦pªG§A«ö¦Û¤vªº³]·Q³]p¤@Ó«ö¶s¡A¦p·Q§â«ö¶sªºªí±´«¦¨ÂI°}¹Ï¡A§A´N¥i¥H¦Û¤v³B²z«ö¶sµøµ¡ªº WM_PAINT ®ø®§¡A·í Windows »Ýnµe«ö¶sªí±ªº®ÉÔ¡A§A´N¥i¥HÀH¦Û¤vªº·N«ä¥hµe¡C
Windowsµ{¦¡¶}©l°õ¦æ«á¡AWindows¬°¸Óµ{¦¡³Ð«Ø¤@Ó¡§®ø®§¦î¦C¡¨¡C³oÓ®ø®§¦î¦C¥Î¨Ó¦s©ñ¸Óµ{¦¡¥i¯à³Ð«Øªº¦UºØ¤£¦Pµøµ¡ªº®ø®§¡Cµ{¦¡¤¤¦³¤@¬q¥N½X¡A¥s°µ¡§®ø®§°j°é¡¨¡A ¥¦¥Î¨Ó±q¦î¦C¤¤¨ú¥X®ø®§¡A¨Ã¥B±N¥¦Ìµo°eµ¹¬ÛÀ³ªºµøµ¡¹Lµ{¡C¦b¨S¦³®ø®§µo¥Íªº®ÉÔ¡A§Aªºµ{¦¡¹ê»Ú¤W´N¦b®ø®§°j°é¤¤Âà°é¤l¡C
³Ð«Ø¤@Óµøµ¡ªº¹Lµ{¦p¤U¡G ¨ú±oµ{¦¡ªº¹ê¨Ò±±¨î½X(hInstance)
µù¥Uµøµ¡Ãþ¡A¹ê»Ú¤W´N¬O¬°§Aªºµøµ¡«ü©w³B²z®ø®§ªº¹Lµ{¡A©w¸q´å¼Ð¡Aµøµ¡·®æ¡AÃC¦âµ¥°Ñ¼Æ
³Ð«Øµ¡¤f
Åã¥Üµøµ¡
µM«á¶i¤J®ø®§°j°é¡A¤]´N¬O¤£°±¦aÀË´ú¦³µL®ø®§¡A¨Ã§â¥¦µo°eµ¹µøµ¡¶iµ{¥h³B²z¡C
³Ð«Ø¤@Óµøµ¡ªº¥N½X¦b¤£¦Pªºµ{¦¡¤¤¹ê»Ú¤W¬O´X¥G¤@¼Ò¤@¼Ëªº¡A©Ò¥H§A½s¤@Ó·sªºµ{¦¡®É¥i¥H§â³o¤@¬q«þ¨Ó«þ¥h¡Aµy·L×§ï¤@¤U´N¦æ¡Aµ{¦¡ªº¤j³¡¤À¥N½X¹ê»Ú¤W¬O¥Î¦bµøµ¡¹Lµ{¤¤¡A¦]¬°³o¤~¬O¤£¦Pµ{¦¡ªº¤£¦P¤§³B¡Cµ¡¤f¹Lµ{ªº½sµ{nÂI¦p¤U¡G
±qWindows¶Çµ¹µ¡¤f¹Lµ{ªº°Ñ¼Æ uMsg ±o¨ì®ø®§Ãþ«¬¡A¨ÃÂà¨ì¤£¦Pªº¤ÀªK¥h³B²z¡C
¹ï¦Û¤v¤w¸g³B²zªº®ø®§¡Aªð¦^ Windows ®É¥²¶·¦beax ¤¤ªð¦^0¡C
¦Û¤v¤£³B²zªº®ø®§¡A¥²¶·½Õ¥Î DefWindowProc ³B²z¡A¨Ã§âªð¦^ȶǦ^Windows¡A§_«h¡AWindows·|µLªkÅã¥Ü¡C
uMsg °Ñ¼Æ¤¤«ü©wªº®ø®§¦³280¦hºØ¡A¹ê»Ú¤W§ÚÌ»Ýn³B²zªº¥u¦³«nªº´XºØ¡A¦«Å¶Ç0250ows¦b³Ð«Øªº®ÉÔ·|µo°e WM_CREATE ®ø®§¡A§ÚÌ´N¥i¥H¦b³o®ÉÔªì©l¤Æ¡A¤À°t°O¾ÐÅéµ¥µ¥¡A¦Ó°h¥X®É·|µo°e WM_CLOSE¡A§ÚÌ´N¥i¥H¶i¦æÄÀ©ñ°O¾ÐÅéµ¥²M°£¤u§@¡A·íWindows¤Wªº¥\¯àªí©Î«ö¶s³Q«ö¤U®Éµo°e WM_COMMAND ®ø®§µ¥µ¥¡A¨ãÅé¥i¥H°Ñ¦Ò Win32 Programmer's Reference¡C¤U±¡A§Ų́Ӭݤ@ӳЫصøµ¡ªºÂ²³æµ{¦¡¡C
¤@ӳЫصøµ¡ªºµ{¦¡
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Programmed by ù¶³±l, bigluo@telekbird.com.cn
; Website: http://asm.yeah.net
; LuoYunBin's Win32 ASM page (ù¶³±lªº½sµ{¼Ö¶é)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat, stdcall
option casemap :none ; case sensitive
include windows.inc
include user32.inc
include kernel32.inc
include comctl32.inc
include comdlg32.inc
include gdi32.inc
includelib user32.lib
includelib kernel32.lib
includelib comctl32.lib
includelib comdlg32.lib
includelib gdi32.lib
IDI_MAIN equ 1000 ;icon
IDM_MAIN equ 4000 ;menu
IDM_EXIT equ 4001
.data?
hInstance dd ?
hWinMain dd ?
hMenu dd ?
szBuffer db 256 dup (?)
.data
szClassName db "Windows Template",0
szCaptionMain db 'µøµ¡½d¥»',0
.code
start:
call _WinMain
invoke ExitProcess,NULL
_WinMain proc
local @stWcMain:WNDCLASSEX
local @stMsg:MSG
invoke InitCommonControls
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke LoadIcon,hInstance,IDI_MAIN
mov hIcon,eax
invoke LoadMenu,hInstance,IDM_MAIN
mov hMenu,eax
;*************** µù¥Uµøµ¡Ãþ *****************************************
invoke LoadCursor,0,IDC_ARROW
mov @stWcMain.hCursor,eax
mov @stWcMain.cbSize,sizeof WNDCLASSEX
mov @stWcMain.hIconSm,0
mov @stWcMain.style,CS_HREDRAW or CS_VREDRAW
mov @stWcMain.lpfnWndProc,offset WndMainProc
mov @stWcMain.cbClsExtra,0
mov @stWcMain.cbWndExtra,0
mov eax,hInstance
mov @stWcMain.hInstance,eax
mov @stWcMain.hIcon,0
mov @stWcMain.hbrBackground,COLOR_WINDOW + 1
mov @stWcMain.lpszClassName,offset szClassName
mov @stWcMain.lpszMenuName,0
invoke RegisterClassEx,addr @stWcMain
;*************** «Ø¥ß¿é¥Xµøµ¡ ***************************************
invoke CreateWindowEx,WS_EX_CLIENTEDGE,\
offset szClassName,offset szCaptionMain,\
WS_OVERLAPPEDWINDOW OR WS_VSCROLL OR WS_HSCROLL,\
0,0,550,300,\
NULL,hMenu,hInstance,NULL
invoke ShowWindow,hWinMain,SW_SHOWNORMAL
invoke UpdateWindow,hWinMain
;*************** ®ø®§°j°é *******************************************
.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
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WndMainProc proc uses ebx edi esi, \
hWnd WORD,uMsg WORD,wParam WORD,lParam:DWORD
mov eax,uMsg
.if eax == WM_CREATE
mov eax,hWnd
mov hWinMain,eax
call _Init
;********************************************************************
.elseif eax == WM_COMMAND
.if lParam == 0
mov eax,wParam
.if ax == IDM_EXIT
call _Quit
.endif
.endif
;********************************************************************
.elseif eax == WM_CLOSE
call _Quit
;********************************************************************
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
WndMainProc endp
_Init proc
invoke SendMessage,hWinMain,WM_SETICON,ICON_SMALL,hIcon
ret
_Init endp
;********************************************************************
_Quit proc
invoke DestroyWindow,hWinMain
invoke PostQuitMessage,NULL
ret
_Quit endp
;********************************************************************
end start
µøµ¡µ{¦¡ªº¤ÀªR
Åý§Ų́Ó²³æ¤ÀªR¤@¤U³oÓµ{¦¡¡Aº¥ýµ{¦¡½Õ¥Î _WinMain¡A¦b_WinMain ¤¤©w¸q¤F¨âÓ§½³¡ÅÜ¼Æ @stMsg ©M @stWinMain¡A¸ê®ÆÃþ«¬¤À§O¬O MSG ©M WNDCLASSEXµ²ºc¡A¦b°Ñ¦Ò¤â¥U¤¤¡A¥i¥H¬Ý¨ìWNDCLASSEX©w¸q¤F¤@Óµøµ¡ªº©Ò¦³°Ñ¼Æ¡A¦p¨Ï¥Îªº¥\¯àªí¡B´å¼Ð¡BÃC¦â¡Bµøµ¡¹Lµ{µ¥¡A±µ¤U¨Óªº¤@¤j°ï mov «ü¥O¹ê»Ú¤W´N¬O¦b¶ñ¼g³oÓ¸ê®Æµ²ºc¡A¶ñ¼g§¹¦¨«á¡A³Ì«nªº¨â¥y¬O mov @stWcMain.lpfnWndProc,offset WndMainProc ©w¸q¤F³B²z®ø®§ªºµøµ¡¹Lµ{¡A mov @stWcMain.lpszClassName,offset szClassName ©w¸q¤F§An³Ð«ØªºÃþªº¦WºÙ¡AµM«á´N¬O¨Ï¥Î RegisterClassEx µù¥U³oÓµøµ¡Ãþ¡Aª`·N¡A³o®ÉÔµøµ¡¨Ã¨S¦³³Ð«Ø¡A§A¥u¤£¹L¬O©w¸q¦n¤F¤@Ó¤lÃþ¡A±µ¤U¥h§An¥Î§A©w¸qªºÃþ¥h³Ð«Ø¤@Óµøµ¡¡C¤]´N¬O¨Ï¥Î CreateWindowEx ¨ç¼Æ¥h³Ð«Ø¥¦¡C¦b¤â¥U¤¤¡ACreateWindowEx ¬O³o¼Ë©w¸qªº¡G
HWND CreateWindowEx(
DWORD dwExStyle, // extended window style
LPCTSTR lpClassName, // pointer to registered class name
LPCTSTR l«Å¶Ç0250owName, // pointer to window name
DWORD dwStyle, // window style
int x, // horizontal position of window
int y, // vertical position of window
int nWidth, // window width
int nHeight, // window height
HWND hWndParent, // handle to parent or owner window
HMENU hMenu, // handle to menu, or child-window identifier
HINSTANCE hInstance, // handle to application instance
LPVOID lpParam // pointer to window-creation data );
¨ä¤¤ªº°Ñ¼Æ dwExStyle ¬Oµøµ¡ªº·®æ¡AlpClassName ´N¬O§Ú̦ۤv©w¸qªºÃþªº¦W¦r¡C¦pªG¤j®an³Ð«Ø¤@Ó¤w¸g©w¸q¦nªºÃþ¡A¦p RichEdit Ãþµ¥µ¥¡A¥un§â lpClassName «ü¦V "RichEdit32" ¦r¦ê´N¦æ¤F¡A·íµM³o®É´N¤£¥Î RegisterClass ¥H¤Î½s¼g¦Û¤vªºµøµ¡¹Lµ{¤F¡C°õ¦æ CreateWindowEx «á¡A±o¨ì¤@Óªð¦^È´N¬Oµøµ¡±±¨î½X¡A³oÓȦb¥H«á¬On¸g±`¥Î¨ì¤F¡A©Ò¥Hn¥ý«O¦s¤U¨Ó¡C³o®Éµøµ¡¨Ã¨S¦³¦b¿Ã¹õ¤WÅã¥Ü¥X¨Ó¡A¦Ó¬O³B©óÁôÂꬺA¡A§ÚÌn¥Î ShowWindow ¨ÓÅã¥Ü¥Xµøµ¡¨Ã¥ÎUpdateWindow ¨Óøµøµ¡ªº¤º®e¡C
µøµ¡Åã¥Ü¥X¨Ó«á¡Aµ{¦¡´N¶i¤J¤@Ó°j°é----®ø®§°j°é¡A«e±§Ú¤w¸g»¡¹L¡A§@¥Î¬O¤£°±¦a±µ¦¬ Windows ®ø®§¨Öµo°eµ¹µøµ¡¹Lµ{¥h³B²z¡CGetMessage ±q®ø®§¦î¦C¤¤¨ú¥X¤@±ø®ø®§¡A¦pªG¨ú±oªº®ø®§¤£¬O WM_QUIT¡A¨º»ò GetMessage ªð¦^¤@Ó«D¹sÈ¡A§_«hªð¦^¹s¡A³o®ÉÔ°j°éµ²§ô¡Aµ{¦¡°õ¦æ ExitProcess°h¦^§@·~¨t²Î¡CTranslateMessage ±N®ø®§¶i¦æ¤@¨ÇÁä½LÂà´«¡A¥Î©ó³B²z¤@¨Ç§Ö±¶Áä¡ADispatchMessage ±N³B²z«áªº®ø®§µo¦^ Windows¡A¥ÑWindows½Õ¥Îµøµ¡¶iµ{¶i¦æ³B²z¡A·íµøµ¡¶iµ{³B²z§¹ªð¦^«á¡Aµ{¦¡¤~±q DispatchMessage ªð¦^¡A±q¦Ó¶}©l¤U¤@Ó GetMessage ½Õ¥Î¡C³o¨Ç¨çªº°Ñ¼Æ¥i¥H°Ñ¦Ò¤â¥U¡C
µøµ¡¹Lµ{ªº¤ÀªR
µ¡¤f¹Lµ{¦³¥|ӰѼơAhWnd ¬O¥»µ¡¤fªº±±¨î½X¡A©M³Ð«Øµ¡¤f®Éªð¦^ªºÈ¬Û¦P¡AuMsg ¬O¥»¦¸½Õ¥Îªº®ø®§Ãþ«¬¡AwParam ©MlParam¬O®ø®§ªº°Ñ¼Æ¡A¨ä§t¸q©M¼ÆÈ®Ú¾Ú®ø®§ªº¤£¦P¦Ó¤£¦P¡C¦b¥»µ{¦¡¤¤¡A§Ú̳B²z WM_CREATE,WM_COMMAND ©M WM_QUIT ®ø®§¡AµM«áªð¦^0¡A¹ï¤£³B²zªº®ø®§¡A¨Ï¥Î invoke DefWindowProc,hWnd,uMsg,wParam,lParam ¨Ó³B²z¨Ãª½±µ¥Î ret ±Nªð¦^ȶǦ^ Windows¡C¦b¦^À³ WM_CLOSE ®ø®§®É¡A§Ú̥ΠDestroyWindow ²M°£µøµ¡¨Ã¥ÎPostQuitMessage ²£¥Í¤@±ø WM_QUIT ®ø®§¡A±q¦Ó¨Ïµ{¦¡¦b ®ø®§°j°é½Õ¥ÎGetMessage ®Éªð¦^0¡A¥Hµ²§ô®ø®§°j°é¨Ãµ²§ôµ{¦¡¡C
¹ê¥Î¬ÛÃö·j´M: map nds bus lg cat it pda ati model sm
|

〓¤¤°ê¶Â«ÈÁp·ù¡]CHU¡^〓«e®Ö¤ß¦¨û¡A²{¬°ºaÅA·|û
〓¤¤°ê¶Â«ÈÁp·ù¡]CHU¡^〓ºôµ¸¹q¤lÂø»x¡m¯x°}¡n½s¿è
·°ó§Þ³N¤u§@«Ç
|
|
|
|