如何创建掩码位图来实现透明绘图
以下是部分代码,运行起来之后就是一黑色的图片,不知是哪里出的错
(以下代码的出处: http://blog.csdn.net/doudouhuy/article/details/4218548 )
.elseif eax==WM_PAINT
invoke LoadBitmap,hInstance,ID_BMP2124
mov hRealBmp,eax
invoke GetObject,eax,sizeof BITMAP,offset bmpInfo
invoke GetDesktopWindow
invoke GetDC,eax
mov hDesktopDC ,eax
invoke CreateCompatibleDC,hDesktopDC
mov hSrcDc ,eax
invoke CreateCompatibleBitmap,hDesktopDC ,bmpInfo.bmWidth,bmpInfo.bmHeight
mov hSrcBitmap ,eax
invoke SelectObject,hSrcDc,hSrcBitmap
invoke SetBkColor,hSrcDc,00FFFFFFh
invoke CreateCompatibleDC,hDesktopDC
mov hMaskDC ,eax
invoke CreateBitmap,bmpInfo.bmWidth,bmpInfo.bmHeight,1,1,0
mov hMaskBmp ,eax
invoke SelectObject,hMaskDC,hMaskBmp
mov hOldMaskBmp ,eax
invoke BitBlt,hMaskDC,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,hSrcDc,0,0,SRCCOPY
invoke SetBkColor,hSrcDc,0
invoke SetTextColor,hSrcDc,00FFFFFFh
invoke BitBlt,hSrcDc,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,hMaskDC,0,0,SRCAND
invoke GetDC,hWnd
mov hdcMainWnd ,eax
invoke SetBkColor,hdcMainWnd,00FFFFFFh
invoke SetTextColor,hdcMainWnd,0
invoke BitBlt,hdcMainWnd,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,hMaskDC,0,0,SRCAND
invoke BitBlt,hdcMainWnd,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,hSrcDc,0,0,SRCPAINT
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include gdi32.inc
includelib gdi32.lib
IDD_DLG1000 equ 1000
IDC_BTN1001 equ 1001
IDC_IMG1002 EQU 1002
ID_BMP2124 equ 1074
.data?
hInstance dd ?
bmpInfo BITMAP <>
.code
_ProcDlgMain proc uses ebx edi esi ,hWnd,wMsg,wParam,lParam
LOCAL hRealBmp:dword
LOCAL hMaskBmp:dword
LOCAL hDesktopDC:dword
LOCAL hSrcDc:dword
LOCAL hMaskBmpDc:dword
LOCAL hMaskDC:dword
LOCAL hdcMainWnd:dword
LOCAL hOldMaskBmp:dword
LOCAL hSrcBitmap:dword
mov eax,wMsg
.if eax==WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax==WM_INITDIALOG
;invoke LoadBitmap,hInstance,ID_BMP2124
;mov hRealBmp,eax
ret
;invoke GetDC,hWnd
;mov hDesktopDC,eax
;invoke CreateCompatibleDC, hDesktopDC
;mov hSrcDc,eax
;invoke SelectObject,hSrcDc,hRealBmp
;
;
;invoke SetBkColor,hSrcDc,00FFFFFFh
;invoke CreateCompatibleDC, hDesktopDC
;mov hMaskBmpDc,eax
;invoke CreateBitmap,512,512,1,1,NULL
;mov hMaskBmp,eax
;invoke SelectObject,hMaskBmpDc,hMaskBmp
;invoke BitBlt,hMaskBmpDc,0,0,512,512,hSrcDc,0,0,SRCCOPY
.elseif eax==WM_PAINT
invoke LoadBitmap,hInstance,ID_BMP2124
mov hRealBmp,eax
invoke GetObject,eax,sizeof BITMAP,offset bmpInfo
invoke GetDesktopWindow
invoke GetDC,eax
mov hDesktopDC ,eax
invoke CreateCompatibleDC,hDesktopDC
mov hSrcDc ,eax
invoke CreateCompatibleBitmap,hDesktopDC ,bmpInfo.bmWidth,bmpInfo.bmHeight
mov hSrcBitmap ,eax
invoke SelectObject,hSrcDc,hSrcBitmap
invoke SetBkColor,hSrcDc,00FFFFFFh
invoke CreateCompatibleDC,hDesktopDC
mov hMaskDC ,eax
invoke CreateBitmap,bmpInfo.bmWidth,bmpInfo.bmHeight,1,1,0
mov hMaskBmp ,eax
invoke SelectObject,hMaskDC,hMaskBmp
mov hOldMaskBmp ,eax
invoke BitBlt,hMaskDC,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,hSrcDc,0,0,SRCCOPY
invoke SetBkColor,hSrcDc,0
invoke SetTextColor,hSrcDc,00FFFFFFh
invoke BitBlt,hSrcDc,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,hMaskDC,0,0,SRCAND
invoke GetDC,hWnd
mov hdcMainWnd ,eax
invoke SetBkColor,hdcMainWnd,00FFFFFFh
invoke SetTextColor,hdcMainWnd,0
invoke BitBlt,hdcMainWnd,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,hMaskDC,0,0,SRCAND
invoke BitBlt,hdcMainWnd,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,hSrcDc,0,0,SRCPAINT
.elseif eax==WM_COMMAND
mov eax,wParam
.if ax==IDC_BTN1001
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp
;--------------------------------------------
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,IDD_DLG1000,NULL,offset _ProcDlgMain,NULL
invoke ExitProcess,NULL
end start
invoke LoadBitmap,hInstance,ID_BMP2124
mov hRealBmp,eax
invoke GetObject,eax,sizeof BITMAP,offset bmpInfo
invoke GetDesktopWindow
invoke GetDC,eax
mov hDesktopDC ,eax
invoke CreateCompatibleDC,hDesktopDC
mov hSrcDc ,eax
invoke CreateCompatibleBitmap,hDesktopDC ,bmpInfo.bmWidth,bmpInfo.bmHeight
mov hSrcBitmap ,eax
invoke SelectObject,hSrcDc,hRealBmp
invoke SetBkColor,hSrcDc,00FFFFFFh
invoke CreateCompatibleDC,hDesktopDC
mov hMaskDC ,eax
invoke CreateBitmap,bmpInfo.bmWidth,bmpInfo.bmHeight,1,1,0
mov hMaskBmp ,eax
invoke SelectObject,hMaskDC,hMaskBmp
mov hOldMaskBmp ,eax
invoke BitBlt,hMaskDC,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,hSrcDc,0,0,SRCCOPY
invoke SetBkColor,hSrcDc,0
invoke SetTextColor,hSrcDc,00FFFFFFh
invoke BitBlt,hSrcDc,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,hMaskDC,0,0,SRCAND
invoke GetDC,hWnd
mov hdcMainWnd ,eax
invoke SetBkColor,hdcMainWnd,00FFFFFFh
;invoke SetTextColor,hdcMainWnd,0
invoke BitBlt,hdcMainWnd,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,hMaskDC,0,0,SRCAND
invoke BitBlt,hdcMainWnd,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,hSrcDc,0,0,SRCPAINT