|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include gdi32.inc
includelib gdi32.lib
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; EQU等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN equ 1000h ;图标
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance dd ?
hWinMain dd ?
hMenu dd ?
hSubMenu dd ?
.const
szClassName db 'My Class',0 ;窗口类名称
szCaptionMain db 'Win32汇编模板',0 ;主窗口标题
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 退出程序
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Quit proc
invoke DestroyWindow,hWinMain ;摧毁窗口
invoke PostQuitMessage,NULL ;退出消息循环
ret
_Quit endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 窗口过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcWinMain proc uses ebx edi esi hWnd,uMsg,wParam,lParam ;窗口过程开始
mov eax,uMsg
;********************************************************************
.if eax == WM_CLOSE ;处理关闭消息
call _Quit
;********************************************************************
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam ;将剩下的消息交给WINDOWS处理
ret ;直接返回
.endif
;********************************************************************
xor eax,eax ;将EAX寄存器致零。
ret ;直接返回
_ProcWinMain endp ;窗口过程结束
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain proc ;主模块执行
local @stWndClass:WNDCLASSEX ;申请注册窗口类的结构体@stWndClass
local @stMsg:MSG ;申请消息结构体@stMsg
invoke GetModuleHandle,NULL ;获取本程序句柄
mov hInstance,eax ;保存句柄到hInstance变量
invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass ;将结构体@stWndClass全部清0
;********************************************************************
; 注册窗口类
;********************************************************************
invoke LoadIcon,hInstance,ICO_MAIN
mov @stWndClass.hIcon,eax
mov @stWndClass.hIconSm,eax
push hInstance ;将程序的实例句柄压栈
pop @stWndClass.hInstance ;将程序的实例句柄出栈存储到结构体中
mov @stWndClass.cbSize,sizeof WNDCLASSEX
mov @stWndClass.style,CS_HREDRAW or CS_VREDRAW
;类的风格 CS_HREDRAW当窗口水平方向的宽度变化时重绘整个窗口
;CS_VREDRAW 当窗口垂直方向的宽度变化时重绘整个窗口
mov @stWndClass.lpfnWndProc,offset _ProcWinMain ;窗口回调过程的地址存储到结构体中
mov @stWndClass.hbrBackground,COLOR_WINDOW + 1 ;画刷:颜色是白色..后面规定要+1
mov @stWndClass.lpszClassName,offset szClassName ;给定类名称
invoke RegisterClassEx,addr @stWndClass ;注册窗口类
;********************************************************************
; 建立并显示窗口
;********************************************************************
invoke CreateWindowEx,WS_EX_CLIENTEDGE,offset szClassName,offset szCaptionMain,\
WS_OVERLAPPEDWINDOW,400,200,400,300,NULL,NULL,hInstance,NULL
;建立窗口 窗口风格扩展client客户 + edge边缘,后面的是类名称,窗口标题,复合窗口风格
mov hWinMain,eax ;将返回句柄存储到hWinMain
invoke ShowWindow,hWinMain,SW_SHOWNORMAL ;显示窗口:SW_SHOWNORMAL普通状态显示
invoke UpdateWindow,hWinMain ;更新窗口
;********************************************************************
; 消息循环
;********************************************************************
.while TRUE ;TRUE==1
invoke GetMessage,addr @stMsg,NULL,0,0 ;取得本程序所有的消息放入@stMsg
.break .if eax == 0 ;如果EAX返回0(收到退出函数就等于0)则立即中断并退出消息循环
invoke TranslateMessage,addr @stMsg ;转译@stMsg里面的消息到窗口过程
invoke DispatchMessage,addr @stMsg ;派发@stMsg里面的消息到窗口过程
.endw
ret
_WinMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
call _WinMain ;调用子程序_WinMain
invoke ExitProcess,NULL ;退出程序
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start ;程序从start开始执行
=======================================================================
RC文件
#include <resource.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//宏命令
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define ICO_MAIN 0x1000 //图标
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN ICON "Main.ico"
|
|