发现一个关于PlgBlt函数的问题!

[复制链接]
查看11 | 回复0 | 2021-1-27 06:35:02 | 显示全部楼层 |阅读模式
.386
.modelflat,stdcall
optioncasemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;Include文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
includewindows.inc
includegdi32.inc
includelibgdi32.lib
includeuser32.inc
includelibuser32.lib
includekernel32.inc
includelibkernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
BMP_MAIN1equ101
BMP_MAIN2equ102
;数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstancedd?
hWinMaindd?
.const
szClassNamedb'MyClass',0,0,0,0
szCaptionMaindb'Myfirst!',0,0
stPointdd100,100,300,100,0,300
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;窗口过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcWinMainprocusesebxediesihWnd,uMsg,wParam,lParam
local@stPs:PAINTSTRUCT
local@stRect:RECT
local@hDc1,@hDc3
moveax,uMsg
;********************************************************************
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;用PlgBlt进行对图片进行旋转
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.ifeax==WM_PAINT
invokeBeginPaint,hWnd,addr@stPs
mov@hDc1,eax
invokeCreateCompatibleDC,@hDc1
mov@hDc3,eax
invokeLoadBitmap,hInstance,BMP_MAIN1
invokeSelectObject,@hDc3,eax
invokeDeleteObject,eax
invokePlgBlt,@hDc1,addrstPoint,@hDc3,0,0,150,150,0,0,0
invokeEndPaint,hWnd,addr@stPs
;********************************************************************
.elseifeax==WM_CLOSE
invokeDestroyWindow,hWinMain
invokePostQuitMessage,NULL
;********************************************************************
.else
invokeDefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
;********************************************************************
xoreax,eax
ret
_ProcWinMainendp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMainproc
local@stWndClass:WNDCLASSEX
local@stMsg:MSG
invokeGetModuleHandle,NULL
movhInstance,eax
invokeRtlZeroMemory,addr@stWndClass,sizeof@stWndClass
;********************************************************************
;注册窗口类
;********************************************************************
invokeLoadCursor,0,IDC_ARROW
[email protected],eax
pushhInstance
[email protected]
[email protected],sizeofWNDCLASSEX
[email protected],CS_HREDRAWorCS_VREDRAW
[email protected],offset_ProcWinMain
[email protected],COLOR_WINDOW+1
[email protected],offsetszClassName
invokeRegisterClassEx,addr@stWndClass
;********************************************************************
;建立并显示窗口
;********************************************************************
invokeCreateWindowEx,WS_EX_CLIENTEDGE,offsetszClassName,offsetszCaptionMain,\
WS_OVERLAPPEDWINDOW,\
100,100,600,400,\
NULL,NULL,hInstance,NULL
movhWinMain,eax
invokeShowWindow,hWinMain,SW_SHOWNORMAL
invokeUpdateWindow,hWinMain
;********************************************************************
;消息循环
;********************************************************************
.whileTRUE
invokeGetMessage,addr@stMsg,NULL,0,0
.break.ifeax==0
invokeTranslateMessage,addr@stMsg
invokeDispatchMessage,addr@stMsg
.endw
ret
_WinMainendp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
call_WinMain
invokeExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
endstart
代码很简单,就是一个窗口,然后在窗口里将一张位图旋转一下!请大家重点帮我看WM_PAINT消息中的代码。
我的问题是:PltBlt的第二个参数在.const字段里面定义,如果不按照双字对齐的话,函数调用会失败!这是为什么?是函数本身的问题还是我什么地方搞错了,谢谢了!
分 -->
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行