Выбрать главу

                    hInstance    :dword,      \

                    lpParam             :dword

PROCTYPE     ptShowWindow        stdcall      \

                    hWnd         :dword,      \

                    nCmdShow     :dword

PROCTYPE     ptUpdateWindow             stdcall      \

                    hWnd         :dword

PROCTYPE     ptGetMessage        stdcall      \

                    pMsg         :dword,      \

                    hWnd         :dword,      \

                    wMsgFilterMin :dword,      \

                    wMsgFilterMax :dword

PROCTYPE     ptTranslateMessage  stdcall      \

                    lpMsg        :dword

PROCTYPE     ptDispatchMessage   stdcall      \

                    pmsg         :dword

PROCTYPE     ptSetMenu           stdcall      \

                    hWnd         :dword,      \

                    hMenu        :dword

PROCTYPE     ptPostQuitMessage   stdcall      \

                    nExitCode    :dword

PROCTYPE     ptDefWindowProc            stdcall      \

                    hWnd         :dword,      \

                    Msg          :dword,      \

                    wParam       :dword,      \

                    lParam       :dword

PROCTYPE     ptSendMessage       stdcall      \

                    hWnd         :dword,      \

                    Msg          :dword,      \

                    wParam       :dword,      \

                    lParam       :dword

PROCTYPE     ptMessageBox        stdcall      \

                    hWnd         :dword,      \

                    lpText       :dword,      \

                    lpCaption    :dword,      \

                    uType        :dword

PROCTYPE     ptExitProcess       stdcall      \

                    exitCode     :dword

extrn        GetModuleHandleA    :ptGetModuleHandle

extrn        LoadIconA           :ptLoadIcon

extrn        LoadCursorA         :ptLoadCursor

extrn        RegisterClassExA    :ptRegisterClassEx

extrn        LoadMenuA           :ptLoadMenu

extrn        CreateWindowExA            :ptCreateWindowEx

extrn        ShowWindow          :ptShowWindow

extrn        UpdateWindow        :ptUpdateWindow

extrn        GetMessageA         :ptGetMessage

extrn        TranslateMessage    :ptTranslateMessage

extrn        DispatchMessageA    :ptDispatchMessage

extrn        SetMenu                    :ptSetMenu

extrn        PostQuitMessage            :ptPostQuitMessage

extrn         DefWindowProcA             :ptDefWindowProc

extrn        SendMessageA        :ptSendMessage

extrn        MessageBoxA         :ptMessageBox

extrn        ExitProcess         :ptExitProcess

UDataSeg

hInst        dd           ?

hWnd         dd           ?

IFNDEF VER1

hMenu        dd           ?

ENDIF

DataSeg

msg          msgStruc     <>

classTitle   db     'Menu demo', 0

wndTitle     db     'Demo program', 0

msg_open_txt db     'You selected open', 0

msg_open_tlt db     'Open box', 0

msg_save_txt db     'You selected save', 0

msg_save_tlt db     'Save box', 0

CodeSeg

Start: call   GetModuleHandleA,   0      ; не обязательно, но желательно

       mov    [hInst],eax

       sub    esp,SIZE WndClassEx        ; отведём место в стеке под структуру

       mov    [(WndClassEx esp).cbSize],SIZE WndClassEx

       mov    [(WndClassEx esp).style],CS_HREDRAW or CS_VREDRAW

       mov    [(WndClassEx esp).lpfnWndProc],offset WndProc

       mov    [(WndClassEx esp).cbWndExtra],0

       mov    [(WndClassEx esp).cbClsExtra],0

       mov    [(WndClassEx esp).hInstance],eax

       call   LoadIconA,          0, IDI_APPLICATION

       mov    [(WndClassEx esp).hIcon],eax

       call   LoadCursorA,        0, IDC_ARROW

       mov    [(WndClassEx esp).hCursor],eax

       mov    [(WndClassEx esp).hbrBackground],COLOR_WINDOW

IFDEF  VER1

       mov    [(WndClassEx esp).lpszMenuName],MyMenu

ELSE

       mov    [(WndClassEx esp).lpszMenuName],0

ENDIF

       mov    [(WndClassEx esp).lpszClassName],offset classTitle

       mov    [(WndClassEx esp).hIconSm],0

       call   RegisterClassExA,   esp    ; зарегистрируем класс окна

       add    esp,SIZE WndClassEx        ; восстановим стек