Assembler & Win32 - страница 4

стр.

>

>                    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        ; восстановим стек

>                                         ; и создадим окно

>IFNDEF VER2

>       call   CreateWindowExA,    WS_EX_OVERLAPPEDWINDOW, \ extended window style

>                                  offset classTitle, \ pointer to registered class name