MASMPlus汇编之简单窗体

.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
;数据段
.data? ;变量声明
	hInstance    dd  ?
	hWinMain     dd  ?
.const;常量声明
	szClassName    db 'MyClass',0
	szCptionMain  db 'myfirstwindow!',0
	szText      db 'win32 assembly,simpler and powerful',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函数结束
 _ProcWinMain endp
 ; _WinMain子函数
_WinMain   proc
			local    @stWndClass:WNDCLASSEX
			local    @stMsg:MSG
			invoke GetModuleHandle,NULL
			mov hInstance,eax
			invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
    ;注册窗口类
              invoke   LoadCursor,0,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 szCptionMain,\
                    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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值