|
|
|
|
Win32·J½s±Ðµ{¤K
±z¬O²Ä
392ÓÂsÄýªÌ
¦³ÃöGDI©MÂI°}¹Ï
GDI §Y¹Ï§Î³]³Æ¤¶±¡A¬O Windows ³Ì«nªº³¡¤À¤§¤@¡A¥¦¤j³¡¤À¥Ñ GDI32.DLL ®w¤¤ªº API ¨Ó³B²z¡AGDI ªº¥Dn¥Øªº¤§¤@¬O¤ä´©»P³]³ÆµLÃöªº¹Ï§Î½sµ{¡A¹ï©ó Dos ¤Uªº¹Ï§Î½sµ{¡A«Ü¦h¤H¥i¯à¡§¤ß¦³¾l±ª¡¨¡A¦]¬°PC ¤¤¦³¤Ó¦hºØÃþªºÅã¥Ü¥d¡A¦Ó´X¥G¨CÓÅã¥Ü¥dªº³B²z³£¬O¤£¦Pªº¡A§Y¨Ï«á¨Ó¦³¤F Vesa ½sµ{¡A§ÚÌÁÙ¬O¤£¯à¥þ³¡ºJ¶}¨ãÅ骺µwÅé¡AWindows GDI ¨Ï§Ú̹ï¹Ï§Îªº½sµ{Åܱo¬Û¹ï²³æ¤F«Ü¦h¡A¥Ñ©óGDI ¬O Windows ³ÌÃe¤jªº³¡¤À¡A¨Ã¤£¬O´X¥y¸Ü¯àÁ¿²M·¡ªº¡A¥»¸`nÁ¿ªº¬O Windows ¤UGDI ªº°ò¥»³B²z¨BÆJ©M²³æªºÂI°}¹Ï³B²z¡A¨Ã¨S¦³¯A¤Î¨ì Directx ¤@Ãþªº½sµ{¡C¥u§Æ±æ¯à¹ïªB¤Í̦³©Ò±Òµo¡C
Windows ¨Ã¤£¤¹³\µ{¦¡®v³X°ÝÅã¥ÜµwÅé¡A¥¦ªº©Ò¦³¹ï¿Ã¹õªº¾Þ§@¬O³q¹LÀô¹Ò³]³Æ¡]DC¡^¨Ó³B²zªº¡A¿Ã¹õ¤Wªº¨C¤@Óµøµ¡¹ïÀ³¤@ÓDC¡A§A¥i¥H§â¤@ÓDC ·Q¹³¦¨³oÓµøµ¡ªºµøÀW½w½Ä°Ï¡A§A¹ïDCªº¾Þ§@µ²ªG·|¤Ï¬M¨ì¿Ã¹õ¤W¡A¦bµøµ¡ªºDC¤§¥~¡A§A¤]¥i¥H¦Û¤v«Ø¥ßDC¡A³o¬Û·í©ó«Ø¥ß¤@Ó°O¾ÐÅ餤ªº½w½Ä°Ï¡A§A¹ï³oÓDCªº¾Þ§@µ²ªG«O¦s¦b°O¾ÐÅ餤¡C§A¤]¥i¥H¥Î API ¦b¤£¦PªºDC¤§¶¡«þ¨©¸ê®Æ¡A¤ñ¦p»¡§A¥i¥H¦b°O¾ÐÅéDC ¤¤¥ý«Ø¥ß¦n¸ê®Æ¡AµM«á«þ¨©¨ìµøµ¡ªºDC¤¤¡A´N¬Û·í©ó§¹¦¨¤F¿Ã¹õªº¨ê·s¡C
»PDCªº¨ú±o¡B«Ø¥ß¨ú®ø¦³ÃöªºAPI¦³¥H¤U´XºØ¡G GetDC(hWnd) - ¨ú±o¬YÓµ¡¤fªºDC¡AAPI ªð¦^¹ïÀ³ªº DC ±±¨î½X
ReleaseDC(hWnd,hDC) - ÄÀ©ñ¥Î GetDC ¨ú±oªº DC ±±¨î½X
CreateCompatibleDC(hDC) - ±q¤@Ó¤wª¾ªº DC ±±¨î½X¤¤«Ø¥ß¤@Ó°O¾ÐÅé DC¡A¦UºØ°Ñ¼Æ¡BÄݩʰѦҤwª¾ªº DC
DeleteDC(hDC) - §R°£¥ÎCreateCompatibleDC «Ø¥ßªº DC
¤W±ªº4ÓAPI¡A¥²¶·¦¨¹ï¥X²{¡A¥Î GetDC ¨ú±oªºDC ¥²¶·¥Î ReleaseDC ÄÀ©ñ¡A¦Ó¥Î CreateCompatibleDC «Ø¥ßªº DC ¥²¶·¥Î DeleteDC §R°£¡A¤£¯à²V²c¡CDC ªº§@¥Î½d³ò¡G¥Î GetDC ¨ú±oªºµøµ¡ DC ¥²¶·¾¨§ÖÄÀ©ñ¡A§A¤£À³¸Ó¦b Windows ªº¤£¦P®ø®§¤§¶¡«O¦s DC ±±¨î½X¡A¦Ó¥Î CreateCompatibleDC «Ø¥ßªº DC ¥i¥Hªø´Á«O¦s¡AÁ|¨Ò»¡©ú¡A¦pªG§A¦b WM_PAINT ©M WM_SIZE ®ø®§¤¤³£n¹ïµøµ¡ªº DC ¶i¦æ¾Þ§@¡A§A¤£¯à¦b WM_INIT ®É¥ý GetDC¡AµM«á«O¦s±±¨î½X¡A³Ì«á¦b WM_CLOSE ®ø®§®É ReleaseDC¡A¦Ó¬O¥²¶·¦b WM_PAINT ©M WM_SIZE ¶}©lªº¦a¤è GetDC¡A¦b®ø®§µ²§ôªº¦a¤è´N ReleaseDC¡A¦Ó¥Î CreateCompatibleDC «Ø¥ßªº«h¬Û¤Ï¡A§A¥i¥H¦b WM_INIT ®É«Ø¥ß¡A¦b WM_CLOSE ®É§R°£¡C
¦pªG·Q§â¤@Ó¦ì¹Ïµe¨ì DC ¤¤¡A§A¥u»Ý²³æªº¥Î invoke SelectObject,hDc,hBitmap ´N¦æ¤F¡A¬O¤£¬O«Ü²³æ¡H¦ý¹Ï§Î¾Þ§@¨Ã¤£¬O³æ³æ§âÂI°}¹Ï©ñ¤J¿Ã¹õ´N¦æ¤F¡AÁÙn¯A¤Î¨ì¦ìªº¾Þ§@¡A¦p§â«e´ºÂI°}¹ÏªºÃä½t¥h±¼¶K¤JI´ºÂI°}¹Ïµ¥¡C Windows ªº GDI ´£¨Ñ¤F¤U±¤@¨Ç DC ¶¡ªº«þ¨© API¡A¤¤¶¡´N¥]¬A¤F«þ¨©ªº¼Ò¦¡¡G
BitBlt hDcDest,XDest,YDest,Width,Height,hDcSource,XSrc,YSrc,dwRop
³oÓ API §â hDcSource ªº XSrc,YSrc ®y¼Ð³Bªº¤º®e«þ¨©¨ì hDcDest ªº XDest,YDest ³B¡A«þ¨©¤j¤p¬° Width,Height¡C
PatBlt hDc,X,Y,Width,Height,dwRop ¬O¥Î¹w©w¸qªº¨ê¤lµ¥ Object ¶ñ¥R DC
StretchBlt,hDcDest,XDest,YDest,Width,Height,hDcSource,XSrc,YSrc,WidthSrc,HeightSrc,dwRop ¬O«þ¨©¨Ã¦Û°ÊÁY©ñ¤j¤p¡A§A¥i¥Hª`·N¨ì¥¦©M BitBlt ¬Û¤ñ¦h¤F¨âÓ°Ñ¼Æ WidthSrc ©M HeightSrc¡A§Oªº³£¬O¤@¼Ëªº¡C
¥H¤WAPI ¤¤ªº dwRop °Ñ¼Æ¬O³ÌÃöÁ䪺¡A¥¦ªºÈ¦³ SRCCOPY¡ASRCPAINT¡ASRCAND¡ADSTINVERT µ¥¡Aªí¥Ü·½DC «þ¨©¨ì¥Ø¼ÐDC«á¶H¯Àªºpºâ¤èªk¡ASRCCOPY ªí¥Ü¥Î·½DCÂл\¥Ø¼ÐDC¡ASRCPAINT¬O°õ¦æ OR ¾Þ§@¡ASRCAND ¬O°õ¦æ AND ¾Þ§@¡ADSTINVERT ¬O¨ú¤Ï¡AÁ|¨Ò»¡©ú¡A¦pªG·½DC¤¤ªº¬Y¤@ÂI¬O¶Â¦â¡A¥Ø¼ÐDC¹ïÀ³ªºÂI¬O¬õ¦â¡A¨º»ò¥Î SRCCOPY«á¡A¥Ø¼ÐDCªºÂIÅܦ¨¶Â¦â¡A¥ÎSRCPAINT «áÁÙ¬O¬õ¦â¡A¦]¬°¶Â (000000) or ¬õ(0000ff) ¡×¬õ(0000ff)¡C
¹ïÀ³¤@¯ë¹ï¿Ã¹õ©Îµøµ¡¶i¦æ¹Ï§Î¾Þ§@ªº¨BÆJ¦p¤U¡C
¥ÎGetDC ¨ú±o¥Ø¼Ðµøµ¡ªº DC
¥Î CreateCompatibleDC «Ø¥ß¤@Ó°O¾ÐÅ餤ªº DC¥Î§@½w½Ä°Ï
¥Î SelectObject ¶ñ¥R°O¾ÐÅéDC ©Î§Oªº¿ìªk¹ï°O¾ÐÅéDC¶i¦æ¾Þ§@¡A¤@¥y¸Ü¡A¥ý§ânÅã¥ÜªºªF¦è³B²z¦n
¥Î BitBlt §â°O¾ÐÅéDC «þ¨©¨ìµøµ¡ DC¤¤¡A§¹¦¨¿Ã¹õ¨ê·s¡C
¥»¸`ªº¨Ò°Æµ{¦¡¬O¤@ӿùõ©ñ¤jÃè¡A¥¦§â·Æ¹«²¾°Ê¨ìªº¦a¤èªº¿Ã¹õ¤º®e©ñ¤j¤@¿Åã¥Ü¨ì¦Û¤vªºµøµ¡¤¤¡C
®Ú·½µ{¦¡ - ·J½sì©lÀÉ®×
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Programmed by ù¶³±l, bigluo@telekbird.com.cn
; Website: http://asm.yeah.net
; LuoYunBin's Win32 ASM page (ù¶³±lªº½sµ{¼Ö¶é)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ª©¥»¸ê°T
; ·J½s±Ðµ{ªþ±a®Ú·½µ{¦¡ - ¿Ã¹õ©ñ¤j¾¹
; V1.0 ------ 2000¦~7¤ë1¤é
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat, stdcall
option casemap :none ; case sensitive
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include ¼Æ¾Ú
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
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
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ ¼Æ¾Ú
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_MAIN equ 1000
ID_BITMAP equ 1001
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ¸ê®Æ¬q
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hWinPic dd ?
hDcMem dd ?
hBitmap dd ?
hWinDesktop dd ?
hInstance dd ?
szBuffer db 256 dup (?)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; °Æµ{¦¡Án©ú
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain PROTO WORD, WORD, WORD,:DWORD
.data
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ¥N½X¬q
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
include Win.asm
;********************************************************************
_ProcDlgMain proc uses ebx edi esi, \
hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD
local @stPoint OINT
local @hDcDesktop,@hDcPic
mov eax,wMsg
.if eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
invoke KillTimer,hWnd,1
invoke DeleteDC,hDcMem
invoke DeleteObject,hBitmap
; *******************************************************************
.elseif eax == WM_INITDIALOG
invoke GetDlgItem,hWnd,ID_BITMAP
mov hWinPic,eax
invoke GetDeskto«Å¶Ç0250ow
mov hWinDesktop,eax
invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,\
SWP_NOMOVE or SWP_NOSIZE
; *******************************************************************
invoke GetDC,hWinDesktop
mov @hDcDesktop,eax
invoke CreateCompatibleDC,@hDcDesktop
mov hDcMem,eax
invoke CreateCompatibleBitmap,@hDcDesktop,80,80
mov hBitmap,eax
invoke SelectObject,hDcMem,hBitmap
invoke ReleaseDC,hWinDesktop,@hDcDesktop
invoke SetTimer,hWnd,1,100,NULL
; *******************************************************************
.elseif eax == WM_TIMER
invoke GetCursorPos,addr @stPoint
sub @stPoint.x,20
sub @stPoint.y,20
.if @stPoint.x < 0
mov @stPoint.x,0
.endif
.if @stPoint.y < 0
mov @stPoint.y,0
.endif
invoke GetDC,hWinDesktop
mov @hDcDesktop,eax
invoke GetDC,hWinPic
mov @hDcPic,eax
invoke PatBlt,hDcMem,0,0,80,80,BLACKNESS
invoke StretchBlt,hDcMem,0,0,80,80,\
@hDcDesktop,@stPoint.x,@stPoint.y,40,40,SRCCOPY
invoke BitBlt,@hDcPic,0,0,80,80,\
hDcMem,0,0,SRCCOPY
invoke ReleaseDC,hWinDesktop,@hDcDesktop
invoke ReleaseDC,hWinPic,@hDcPic
.else
;********************************************************************
; ª`·N¡G¹ï¸Ü¤è¶ôªº®ø®§³B²z«á¡Anªð¦^ TRUE,¹ï¨S¦³³B²zªº®ø®§
; nªð¦^ FALSE
;********************************************************************
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp
;********************************************************************
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,0
invoke ExitProcess,NULL
end start
µ{¦¡ªº¤ÀªR©MnÂI
¦bµ{¦¡ªºªì©l¤Æ¤¤¡A§ÚÌ¥ÎGetDc ¨úªº®à±ªº¿Ã¹õªº DC¡A¦A¥Î CreateCompatibleDC «Ø¥ß¤@Ó°O¾ÐÅéDC°µ½w½Ä°Ï¡A«Ø¥ß¤@ÓÂI°}¹Ï¦A¥Î SelectObject §â hDcMem ³]¸m¬°³oÓÂI°}¹Ï¬O¬°¤F¬O hDcMem ªº¤j¤pÅܬ° 80x80¡C
invoke GetDC,hWinDesktop
mov @hDcDesktop,eax
invoke CreateCompatibleDC,@hDcDesktop
mov hDcMem,eax
invoke CreateCompatibleBitmap,@hDcDesktop,80,80
mov hBitmap,eax
invoke SelectObject,hDcMem,hBitmap
invoke ReleaseDC,hWinDesktop,@hDcDesktop
µM«á¦bµ{¦¡ªº¨C 0.1 ¬í¤@¦¸ªº WM_TIMER p®É¾¹®ø®§¤¤¡A§ÚÌ¥ý¥Î GetDC ¨ú±o®à±©M¹ï¸Ü¤è¶ô¤¤¤å¥»®Øªº±±¨î½X¡AµM«á¥Î PatBlt §â°O¾ÐÅéDC²M°£¬°¶Â¦â¡A¦A¥Î StretchBlt ±q®à±DC¤¤«þ¨© 40x40ªº°Ï°ì¨ì°O¾ÐÅé DC ¤¤¡A·sªº¤j¤p¬O 80x80¡]©ñ¤j¥\¯à´N¬O³o¼Ë¹ê²{ªº¡^¡A«þ¨©ªº¦ì¸m¬O¥Î GetCursorPos ¨ú±oªº¡A¤]´N¬O·Æ¹«ªº·í«e¦ì¸m¡A³Ì«á¥Î BitBlt §â°O¾ÐÅéDC «þ¨©¨ì¹ï¸Ü¤è¶ô¤¤¡C¦pªGª½±µ§â®à±DC «þ¨©¨ì¹ï¸Ü¤è¶ô¤¤¤]¥i¥H¡A¦ý¬O·í·Æ¹«²¾°Ê¨ì¿Ã¹õÃä½t¤W®É¡A¥Ñ©ó¿Ã¹õ¥~ªºÂI¬OµL®Äªº¡A©Ò¥H¹ï¸Ü¤è¶ô¤¤ªº¤@³¡¤À·|ªá«Ì¡A¤j®a¥i¥H§ï°Êµ{¦¡¸Õ¸Õ¡C
invoke GetCursorPos,addr @stPoint
invoke GetDC,hWinDesktop
mov @hDcDesktop,eax
invoke GetDC,hWinPic
mov @hDcPic,eax
invoke PatBlt,hDcMem,0,0,80,80,BLACKNESS
invoke StretchBlt,hDcMem,0,0,80,80,\
@hDcDesktop,@stPoint.x,@stPoint.y,40,40,SRCCOPY
invoke BitBlt,@hDcPic,0,0,80,80,\
hDcMem,0,0,SRCCOPY
invoke ReleaseDC,hWinDesktop,@hDcDesktop
invoke ReleaseDC,hWinPic,@hDcPic
¹ê¥Î¬ÛÃö·j´M: map nds bus lg ªá it ati model sm dc
|

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