首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

怎么创建掩码位图来实现透明绘图

2012-12-21 
如何创建掩码位图来实现透明绘图以下是部分代码,运行起来之后就是一黑色的图片,不知是哪里出的错(以下代码

如何创建掩码位图来实现透明绘图
以下是部分代码,运行起来之后就是一黑色的图片,不知是哪里出的错
(以下代码的出处: 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

[最优解释]


invoke SetTextColor,hSrcDc,00FFFFFFh ;
这句设置了有什么用呢?
又不显示text(这个是指DrawText或控件上的string)

可能我说的不清楚,同时windows画图方面知道的有限,lz在琢磨下呢
[其他解释]
该回复于2012-11-24 09:57:59被管理员删除
[其他解释]
以下是全部代码 
主要是参考下面的例子 http://blog.csdn.net/doudouhuy/article/details/4218548



.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


[其他解释]
该回复于2012-11-24 09:57:59被管理员删除
[其他解释]
罗云彬大哥写的
[其他解释]
Chapter07  BmpClock

引用:
win32汇编程序设计里有例子吧?你是看的那本书么?


这个么Chapter07  BmpClock   我有啊
[其他解释]
引用:
这个有必要写成汇编么?代码与汇编关系不大,直接C的话,会更方便点,易看点


我就想知道错在哪了
[其他解释]
最佳答案:

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

热点排行