WIN32汇编显示一个窗口

.386 ;表示要用到386指令
.model Flat,stdcall ;32位程序,要用flat啦!;stadcall,标准调用
option casemap:none ;区别大小写
include windows.inc ;包括常量及结构定义

include kernel32.inc ;函数原型声明
include user32.inc

includelib kernel32.lib ;用到的引入库
includelib user32.lib
include  gdi32.inc
includelib gdi32.lib
.data;数据区,定义2个字符串
hInstance dd ?
hWinMain dd ?

szClassName db 'MyClass',0
szCaptionMain db '第一个窗口应用',0
szText  db '中间测试文字',0

 

.code ;代码开始执行处

_ProcWinMain proc uses ebx edi esi hWnd,uMsg,wParam,lParam
local @stPs:PAINTSTRUCT
local @stRect:RECT
local @hDc

mov eax,uMsg
.if eax==WM_PAINT
invoke BeginPaint,hWnd,addr @stPs
mov @hDc,eax
invoke GetClientRect,hWnd,addr @stRect
invoke DrawText,@hDc,addr szText,-1,\
 addr @stRect,\
 DT_SINGLELINE or DT_CENTER or DT_VCENTER
invoke EndPaint,hWnd,addr @stPs
.elseif eax==WM_CLOSE
invoke DestroyWindow,hWinMain
invoke PostQuitMessage,NULL
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
 ret
.endif
xor eax,eax

   ret
_ProcWinMain endp


_WinMain proc
 local @stWndClass:WNDCLASSEX
 local @stMsg:MSG
 invoke GetModuleHandle,NULL
 mov hInstance,eax;将返回值句柄保存
 invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
 
 ;注册窗口类
 invoke LoadCursor,NULL,IDC_ARROW
 mov @stWndClass.hCursor,eax
 push hInstance
 pop @stWndClass.hInstance
 mov @stWndClass.cbSize,sizeof WNDCLASSEX
 mov @stWndClass.style,CS_HREDRAW or CS_VREDRAW
 mov @stWndClass.lpfnWndProc,offset _ProcWinMain
 mov @stWndClass.hbrBackground,COLOR_WINDOW + 1
 mov @stWndClass.lpszClassName,offset szClassName
 
 invoke RegisterClassEx,addr @stWndClass
 ;建立并显示窗口
 invoke CreateWindowEx,WS_EX_CLIENTEDGE,offset szClassName,offset szCaptionMain,\
 WS_OVERLAPPEDWINDOW,\
 100,100,600,400,\
 NULL,NULL,hInstance,NULL
 mov hWinMain,eax
 invoke ShowWindow,hWinMain,SW_SHOWNORMAL
 invoke UpdateWindow,hWinMain
 ;消息循环
 .while TRUE
 invoke GetMessage,addr @stMsg,NULL,0,0
 .break .if eax==0
 invoke TranslateMessage,addr @stMsg
 invoke DispatchMessage,addr @stMsg
 .endw
   ret
_WinMain endp

start:


call _WinMain
invoke ExitProcess,NULL ;程序退出
end start;结束

 

 

 

 运行结果如下图:

 

 -

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值