我们用WIN32汇编构建第一个WINODWS程序,这个程序完成显示一个带问号的对话框,对话框的内容是现在系统时间。
.model flat, stdcall
option casemap :none
include user32.inc
include kernel32.inc
include gdi32.inc
include masm32.inc
includelib user32.lib
includelib kernel32.lib
includelib gdi32.lib
includelib masm32.lib
.data?
szbuffer db 100 dup(?)
.data
szcaptionName db "我的HELLO,WORLD!",0
szbegin db "现在时间:"
sztext db 100 dup(?)
;################################################################# .code
;程序的入口
call _callgetnow
invoke MessageBox,NULL,offset szbegin,offsetszcaptionName,MB_ICONQUESTION or MB_OK
invoke ExitProcess,eax
;#################################################################
_callgetnow proc
pushad
invokeGetDateFormat,LOCALE_USER_DEFAULT,DATE_LONGDATE,NULL,NULL,addrsztext,100
invokeGetTimeFormat,LOCALE_USER_DEFAULT,LOCALE_NOUSEROVERRIDE,NULL,NULL,addrszbuffer,100
invokeszCatStr,addr sztext,addr szbuffer
popad
ret
_callgetnow endp
;#################################################################
大功造成,运行一下试试效果吧!
下面我们接着来做一个有些难度的helloworld,这个程序将系统时间直接显示在桌面上。程序源代码如下:
.model flat, stdcall
option casemap :none
include user32.inc
include kernel32.inc
include gdi32.inc
include masm32.inc
includelib user32.lib
includelib kernel32.lib
includelib gdi32.lib
includelib masm32.lib
.data?
szbuffer db 100 dup(?)
.data
szmssucesscap db "HELLO,WORLD!深入",0
szmssucesstext db "在桌面的(300,300)处显示了当前时间",0
szmscap db "错误",0
szmstext1 db "无法在桌面上显示!",0
szmstext2 db "无法得到全屏DC!",0
szbegin db "现在时间:"
sztext db 100 dup(?)
;#########################################################################
.code
;程序的入口
_showtext proto :DWORD
call _callgetnow
invoke _showtext,offset szbegin
invoke ExitProcess,eax
;#########################################################################
_callgetnow proc
pushad
invokeGetDateFormat,LOCALE_USER_DEFAULT,DATE_LONGDATE,NULL,NULL,addrsztext,100
invokeGetTimeFormat,LOCALE_USER_DEFAULT,LOCALE_NOUSEROVERRIDE,NULL,NULL,addrszbuffer,100
invokeszCatStr,addr sztext,addr szbuffer
popad
ret
_callgetnow endp
;#########################################################################
_showtext proc lpsztext:DWORD
LOCAL@Desktopdc:HDC
LOCAL@dwcolor:DWORD
pushad
mov@dwcolor,00FF0000h
invokeGetWindowDC,NULL
cmpeax,0
jne @f
invokeMessageBox,NULL,offset szmstext2,offset szmscap,MB_ICONERROR
@@:
mov@Desktopdc,eax
invokelstrlen,lpsztext
movebx,eax
invokeSetBkMode,@Desktopdc,TRANSPARENT
invokeSetTextColor,@Desktopdc,@dwcolor
invokeTextOut,@Desktopdc,300,300,lpsztext,ebx
invokeMessageBox,NULL,offset szmssucesstext,offsetszmssucesscap,MB_ICONINFORMATION
cmpeax,0
jne @f
invokeMessageBox,NULL,offset szmstext1,offset szmscap,MB_ICONERROR
@@:
popad
ret
_showtext endp
;#########################################################################
因此COLORREF类型的变量就是DWORD型变量。
586



被折叠的 条评论
为什么被折叠?



