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