以下是一个实例,
说明:
_ShowBmpThread proc uses ebx esi edi,_lParam(这种格式是WIN32API中指定的格式,注意那个参数,_lParam,必须有(1个))
调用过程: _ShowBmp proc hWinMain:DWORD(里面最关键的就是 invoke CreateThread,NULL,0,addr _ShowBmpThread,hWinMain,NULL,addr @dwThreadID)这一句,注意hWinMain的参数就是传给_lParam使用的。然后就是 invoke CloseHandle,eax
所以简单一点描述就是这样子的
;======================================
_ShowBmpThread proc uses ebx esi edi,_lParam
;....线程工作的内容
ret
_ShowBmpThread endp
_ShowBmp proc
LOCAL @dwThreadID
;线程调用 dwParamter 就是传给_lParam的参数,这里为NULL,倒数第三个参数。
invoke CreateThread,NULL,0,addr _ShowBmpThread,NULL,NULL,addr @dwThreadID
invoke CloseHandle,eax
ret
_ShowBmp endp
;===================================================
应用中的实例见下面:
_ShowBmpThread proc uses ebx esi edi,_lParam
LOCAL hWinMain:DWORD
LOCAL bmp:HBITMAP
LOCAL mdc:HDC
LOCAL hdc:HDC
mov eax,DWORD PTR _lParam
mov hWinMain,eax
pushad
;1 首先把位图载入:
invoke LoadImage,NULL,addr szBmpPath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE
mov bmp,eax
mov edx,hWinMain;目标窗体句柄
invoke GetDC,edx
mov hdc,eax
;2 从你的DC中创建内存DC
invoke CreateCompatibleDC,hdc;注意这个hdc由上面GetDC函数获取,如果在在哪个窗体画图就获取哪个窗体的DC通过句柄
mov mdc,eax
;3 把位图选入内存DC
invoke SelectObject,mdc,bmp
;4 帖图
invoke BitBlt,hdc,50,90,500,400,mdc,0,0,SRCCOPY
invoke DeleteDC,mdc
invoke ReleaseDC,edx,hdc
popad
ret
_ShowBmpThread endp
_ShowBmp proc hWinMain:DWORD
LOCAL @dwThreadID
invoke CreateThread,NULL,0,addr _ShowBmpThread,hWinMain,NULL,addr @dwThreadID
invoke CloseHandle,eax
ret
_ShowBmp endp