RSS    

   Реферат: Программа демонстрирующая иерархию окон Windows

<25>    extrn             ExitProcess:PROC            

<26>    extrn             PostQuitMessage:PROC

<27>    extrn             DefWindowProcA:PROC

<28>    extrn             PlaySoundA:PROC

<29>    extrn             ReleaseDC:PROC

<30>    extrn             TextOutA:PROC  

<31>    extrn             GetDC:PROC

<32>    extrn             BeginPaint:PROC

<33>    extrn            EndPaint:PROC

<34>  ;объявление оконной функции объектом, видимым за пределами данного кода

<35>  public WindowProc

<36>   .data

<37>    hwnd              dd           0

<38> hInst                  dd           0

<39> hdc                     dd           0

<40> ;lpVersionInformation OSVERSIONINFO   <?>

<41> wcl       WNDCLASSEX    <?>

<42> message   MSG    <?>

<43> ps       PAINTSTRUCT   <?>

<44> szClassName db     'Приложение Win32 ',0

<45> szTitleName db     'Каркасное приложение Win32 на ассемблере'.0

<46> MesWindow  db   'Это  процесс разработки приложения

 на ассемблере?'

<47> MesWindowLen=     $-MesWindow

<48> playFileCreate       db   'create.wav',0

<49> playFilePaint         db   'paint.wav',0

<50> playFileDestroy    db  'destroy.wav',0

<51> . code

<52> start     proc   near

<53> ;точка входа в программу:

<54> ;начало стартового кода

<55> ;вызовы расположенных ниже функций можно при необходимости раскомментировать,

<56> :но они не являются обязательными в данной программе

<57> ;вызов BOOL GetVersionEx(LPOSVERSIONINFO lpVersionInformation)

<58> ;        push   offset lpVersionInformation

<59> ;        call   GetVersionExA

<60> ;далее можно вставить код для анализа информации о версии Windows

<61> ;вызов LPTSTR GetCommandLine(VOID) - получить указатель на командную строку

<62> ;       call   GetCommandLineA  :врегистре еах адрес

<63> ;вызов LPVOID GetEnvironmentStrings (VOID) - получить указатель

 ;на блок с переменными окружения

<64> ;       call   GetEnvironmentStringsA  ;врегистре еах адрес

<65> ;вызов VOIDGetStartupInfo(LPSTARTUPINFO lpStartupInfo)   ;указатель

 ;на структуру STARTUPINFO

<66> ;       push   offset lpStartupInfo

<67> ;       call   GetStartupInfoA

<68> ;вызов HMODULE GetModuleHandleA (LPCTSTR lpModuleName)

<69> push   NULL ;0->GetModuleHandle

<70> call   GetModuleHandleA  ;получить значение базового адреса,

<71> mov    hInst, eax     ;no которому загружен модуль.

<72> ;далее hInst будет использоваться в качестве дескриптора данного приложения

<73> ;конец стартового кода

<74> WinMain:

<75>;определить класс окна ATOM RegisterClassEx(CONST WNDCLASSEX *lpWndClassEx),

<76> ;                  где *lpWndClassEx - адрес структуры WndClassEx

<77> ;для начала инициализируем поля структуры WndClassEx

<78> mov    wcl.cbSize,typeWNDCLASSEX   -.размер структуры

 :в wcl.cbCIZE

<79> mov  wcl.style,CS_HREDRAW+CS_VREDRAW  

<80> mov    wcl.pfnWndProg,offsetWindowProg  ;адрес оконной  процедуры

<81> mov    wcl.cbCisExtra,0

<82> mov    wcl.cbWndExtra,0

<83> mov    eax,hInst

<84> mov    ;дискриптор приложения в поле hInstance структуры wcl

<85> mov    wcl.hInstance, eax

<86> ;готовим вызов HICON LoadIcon (HINSTANCE hInstance, LPCTSTR lpIconName)

<87> push IDI_APPLICATION ,-стандартный значок

<88> push 0 ;NULL

<89> саП LoadIconA

<90> mov wcl.hIcon, eax ,-дескриптор значка в поле hIcon I

;структуры wcl

<91> ;готовим вызов HCURSOR LoadCursorA (HINSTANCE hInstance, LPCTSTR M ;lpCursorName)

<92> push IDC_ARROW ,-стандартный курсор - стрелка

<93> push 0

<94> саll LoadCursorA

<95> mov wcl.hCursor,eax ;дескриптор курсора в поле hCursor

;структуры wc1

<96> ;определим цвет фона окна - белый

<97> ;готовим вызов HGDIOBJ GetStockObject(int fnObject)

<98> push WHITE_BRUSH

<99> саП GetStockObject

<100> mov wcl.hbrBackground, eax

<101> mov dword ptrwcl.lpszMenuName, 0 ;без главного меню

<102> mov dwordptrwcl.lpszClassName,offsetszC1assName; имя

;класса окна  

<103> mov wcl.hIconSm, 0

<104> ;регистрируем класс окна - готовим вызов RegisterClassExA (&wndclass)

<105> push offset wcl

<106> саП RegisterClassExA

<107> test ax, ах;проверить на успех регистрации класса окна

<108> jz end_cyc1_msg ;неудача

<109> ;создаем окно:

<110> ;готовим вызовHWND CreateWindowExA(DWORDdwExStyle,

 LPCTSTR1pClassName,

<111> ; LPCTSTR 1pW1ndowName, DWORD dwStyle, int x, int у, int nWidth,

             |;int nHeight,

<112> ;  HWND hWndParent, HMENU hMenu, HANDLE hInstance, LPVOID      

             ;lpParam)

<113>     push   0   ;lpParam                         

<114>     push   hInst ;hInstance     

<115>     push   NULL ;menu

<116>      push   NULL ;parent hwnd

<117>      push   CW_USEDEFAULT    ;высота окна

<118>      push   CW_USEDEFAULT    ;ширина окна

<119>       push   CW_USEDEFAULT    ;координата у левого верхнего угла

           ;окна

<120>       push   CW_USEDEFAULT    ;координата х левого верхнего угла

<121>       push   WS_OVERLAPPEDWINDOW    ;стиль окна

<122>       push   offset szTitleName ;строка заголовка окна

<123>       push   offset szClassName ;имя класса окна

<124>       push   NULL

<125>      саll   CreateWindowExA

<126>       mov    hwnd,eax  ;-дескриптор окна

<127>       ;показать окно:

<128>        ;готовим вызов BOOL ShowWindow( HWND hWnd, int nCmdShow )

<129> push   SW_SHOWNORMAL

<130> push         hwnd

<131> call         ShowWindow

<132> ;перерисовываем содержимое окна

<133> ;готовим вызов BOOL UpdateWindow( HWND hWnd )

<134> push         hwnd

<135> call          UpdateWindow

<136> ;запускаем цикл сообщений:

<137> ;готовим вызов BOOL GetMessageA( LPMSG lpMsg, HWND hWnd,

<138> ;                     UINTwMsgFilterMin,UINTwMsgFilterMax)

<139> cycl_msg:

<140> push         0

<141> push         0

<142> push         NULL

<143> push         offset message

<144> cal 1         GetMessageA

<145> cmp           ах, 0

<146> je            end_cycl_msg

<147> ;трансляция ввода с клавиатуры

<148> ;готовим вызов BOOL Trans1ateMessage( CONST MSG *lpMsg )

<149> push         offset message

<150> call         TranslateMessage

<151> ;отправим сообщение оконной процедуре

<152> ;готовим вызов LONG D1spatchMessage( CONST MSG *lpmsg )

<153> push          offset message

<154> call          DispatchMessageA

<155> jmp           cycl_msg

<156> end_cycl_msg:

<157>

<158> ;выход из приложения

<159> ;готовим вызов VOID ExitProcess( UINT uExitCode )

<160> push         NULL

<161> call          ExitProcess

<162> start            endp

<163> ; - - - - -  - - - - - - - --WindowProc-- - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

<164> WindowProc    proc

<165> argP0nwnd:DWORD, PPmes:DWORD, @@wparam:DWORD, @@lparam:DWORD

<166> uses ebx, edi, es1        ;эти регистры обязательно должны сохраняться

<167> local              @@hdc:DWORD

<168> cmp           @@mes, WM_DESTROY

<169> je            wmdestroy

<170> cmp           @@mes, WM_CREATE

<171> je            wmcreate

<172> cmp           @@mes, WM_PAINT

<173> je            wmpaint

<174> jmp           default

<175> wmcreate:

<176> ;обозначим создание окна звуковым эффектом

<177> ;готовим вызов функции BOOL PlaySound(LPCSTR pszSound, HMODULE hmod, DWORD

 ;fdwSound     )

<178> push          SND_SYNC+SND_FILENAME

<179> push         NULL

<180> push         offset playFileCreate

<181>        call   PlaySoundA

<182>         mov    eax, О;возвращаемое значение - 0

<183>         jmp    exit_wndproc

<184> wmpaint:

<185>         push   SND_SYNC+SND_FILENAME

<186>         push   NULL

<187>         push   offset playFIilePaint

<188>         call P1aySoundA

<189>;получим контекст устройства HDC BeginPaint(HWND nwnd,LPPAINTSTRUCT;LPpAINT)

<190>         push   offset ps

<191>         push   @@hwnd

<192>         call BeginPaint

<193>         mov @@hdc,eax

Страницы: 1, 2, 3


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.