初学者,按照教材写了一个windows窗口出来,但是点击关闭按钮后只是窗口关闭而,进程无法关闭,请高手帮帮忙看看怎么回事,代码如下:


.386
.model flat,stdcall
option casemap:none

include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib

WinMain proto :dword,:dword,:dword,:dword

.data
ClassName byte 'SimpleWinClass',0
AppName byte 'our first window',0

.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?


.code
start:
    invoke GetModuleHandle,NULL
    mov hInstance,eax
    invoke GetCommandLine
    mov CommandLine,eax
    invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
    invoke ExitProcess,eax
    

WinMain proc hInst:HINSTANCE,hPreInst:HINSTANCE,CmdLine:LPSTR,CmdShow:dword
    
    LOCAL wc:WNDCLASSEX,msg:MSG,hwnd:HWND
    
    ;initialization of wndclassex
    mov wc.cbSize,sizeof WNDCLASSEX
    mov wc.style,CS_HREDRAW or CS_VREDRAW
    mov wc.lpfnWndProc,offset WinProc
    mov wc.cbClsExtra,NULL
    mov wc.cbWndExtra,NULL
    push hInst
    pop wc.hInstance
    mov wc.hbrBackground,COLOR_WINDOW+1
    mov wc.lpszMenuName,NULL
    mov wc.lpszClassName,offset ClassName
    invoke LoadIcon,NULL,IDI_APPLICATION
    mov wc.hIcon,eax
    mov wc.hIconSm,eax
    invoke LoadCursor,NULL,IDC_ARROW
    mov wc.hCursor,eax
    
    ;register the windows class
    invoke RegisterClassEx,addr wc
    ;create window
    invoke CreateWindowEx,NULL,addr ClassName,addr AppName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInst,NULL
    mov hwnd,eax
    ;show window
    invoke ShowWindow,hwnd,SW_SHOWNORMAL
    invoke UpdateWindow,hwnd
    ;enter message loop
    .while TRUE
        invoke GetMessage,addr msg,hwnd,0,0
        .break.if(!eax)
        invoke TranslateMessage,addr msg
        invoke DispatchMessage,addr msg
        mov eax,msg.wParam
    .endw
    
    ret

WinMain endp

WinProc proc hwnd:HWND,uMSG:UINT,wParam:WPARAM,lParam:LPARAM
    
    .if uMSG==WM_DESTROY
        invoke PostQuitMessage,NULL
    .else
        invoke DefWindowProc,hwnd,uMSG,wParam,lParam
        ret
    .endif
    xor eax,eax
    
    ret
WinProc endp

end start