win32汇编创建窗口

    .386
    .model flat,stdcall
    option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include    \masm32\include\windows.inc
include    \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
include    \masm32\include\gdi32.inc
includelib \masm32\lib\gdi32.lib
include    \masm32\include\kernel32.inc
includelib    \masm32\lib\kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    .data
hInstance   dd  ?
hWinMain    dd  ?
    .const
szClassName     db  'MyClass',0
szCaptionMain   db  'My first Window !',0
szText          db  'Win32 Assembly, Simple 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    endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

_WinMain    Proc	
            local   @stWndClass11:WNDCLASSEX
            local   @stMsg:MSG

            invoke  GetModuleHandle,NULL
            mov     hInstance,eax
            invoke  RtlZeroMemory,addr @stWndClass11,sizeof @stWndClass11
;*******************************************************************************
;注册窗口
;*******************************************************************************

           ; invoke LoadCursor,0,IDC_ARROW
            mov     @stWndClass11.hCursor,NULL
            push    hInstance
            pop     @stWndClass11.hInstance
            mov @stWndClass11.cbSize,sizeof WNDCLASSEX
            mov @stWndClass11.style,CS_HREDRAW or CS_VREDRAW
            mov @stWndClass11.lpfnWndProc, offset _ProcWinMain
            mov @stWndClass11.hbrBackground,COLOR_WINDOW + 1
            mov @stWndClass11.lpszClassName, offset szClassName
            invoke  RegisterClassEx,addr @stWndClass11
;*******************************************************************************
;建立并显示窗口
;*******************************************************************************
            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, hWinMain, 0, 0
                    .break.if eax == -1
                    invoke  TranslateMessage, addr @stMsg
                    invoke  DispatchMessage, addr   @stMsg  
            .endw
            ret
            
_WinMain    endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
           call _WinMain
           invoke   ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            end start


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值