Мегаобучалка Главная | О нас | Обратная связь


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



2019-07-03 182 Обсуждений (0)
Программа демонстрирующая иерархию окон Windows » 0.00 из 5.00 0 оценок




 

p386; эта директива разрешает транслятору обрабатывать команды процессора i 386

jumps;транслятор автоматически преобразует команду условной передачи управления

;в комбинацию условной и безусловной команды, если условная в силу ограниченности ;области своего действия не обеспечивает передачу управления по нужному адресу

model flat,STDCALL;выбирает модель памяти для 32-разрядного программирования и ;правила передачи параметров функции STDCALL, далее действующие по умолчанию

UNICODE = 0

include win32.inc;файл, содержащий описание структур данных и констант

; some 32-bit constants and structures

L equ <LARGE>; последовательности символов LARGE, являющейся именем операции, объявляющей следующий за ней операнд 32-разрядным, присваивается имя L

 Define the external functions we will be linking to

;

extrn       BeginPaint:PROC;описание импортируемых из Windows функций

extrn       CreateWindowExA:PROC

extrn       DefWindowProcA:PROC

extrn       DispatchMessageA:PROC

extrn       EndPaint:PROC

extrn       ExitProcess:PROC

extrn       GetMessageA:PROC

extrn       GetModuleHandleA:PROC

extrn       GetStockObject:PROC

extrn       InvalidateRect:PROC

extrn       LoadCursorA:PROC

extrn       LoadIconA:PROC

extrn       MessageBeep:PROC

extrn       MessageBoxA:PROC

extrn       PostQuitMessage:PROC

extrn       RegisterClassA:PROC

extrn       ShowWindow:PROC

extrn       SetWindowPos:PROC

extrn       TextOutA:PROC

extrn       TranslateMessage:PROC

extrn       UpdateWindow:PROC

extrn     FindFirstFileA:PROC

.data;предопределенное имя, означающее начало сегмента данных

newhwnd     dd 0

lppaint     PAINTSTRUCT <?>

msg         MSGSTRUCT <?>

wc          WNDCLASS <?>

hInst       dd 0

szTitleName db 'Это окно УГТУ',0

szTitleName1 db 'Это окно группы СП-923',0 ;'Каркасное приложение Win32 на ассемблере'.0

szClassName db 'ASMCLASS32',0 ;'Приложение Win32’

Buffer        db 'Привет из Нягани!',0

new1hwnd dd 0

MSG_L     EQU 14

.code

start:

   push L 0

   call GetModuleHandleA ; get hmod (in eax)

   mov [hInst], eax  ; hInstance is same as HMODULE

   ; in the Win32 world

reg_class:

;

; initialize the WndClass structure ;Иинициализация сруктуры WndClass

;

  mov [wc.clsStyle], CS_HREDRAW + CS_VREDRAW + CS_GLOBALCLASS;тип ;класса

   mov [wc.clsLpfnWndProc], offset WndProc; адрес оконной процедуры

   mov [wc.clsCbClsExtra], 0

   mov [wc.clsCbWndExtra], 0

   mov eax, [hInst]

   mov [wc.clsHInstance], eax ;дикриптор модуля

   push L IDI_APPLICATION;заданная по умолчанию пиктограмма

   push L 0

   call LoadIconA

   mov [wc.clsHIcon], eax

   push L IDC_ARROW

   push L 0

   call LoadCursorA

   mov [wc.clsHCursor], eax

   mov [wc.clsHbrBackground], COLOR_WINDOW + 1

   mov dword ptr [wc.clsLpszMenuName], 0

      mov dword ptr [wc.clsLpszClassName], offset szClassName

   push offset wc

   call RegisterClassA

   push L 0                 ; lpParam

   push [hInst]             ; hInstance

   push L 0                 ; menu

   push L 0                 ; parent hwnd

   push L CW_USEDEFAULT     ; height

   push L CW_USEDEFAULT     ; width

   push L CW_USEDEFAULT     ; y

   push L CW_USEDEFAULT     ; x

   push L WS_OVERLAPPEDWINDOW ; Style

   push offset szTitleName  ; Title string

   push offset szClassName  ; Class name;имя класса

   push L 0                 ; extra style

   call CreateWindowExA                        

   mov [newhwnd], eax

   push L SW_SHOWNORMAL

   push [newhwnd]

   call ShowWindow

   push [newhwnd]

 

   call UpdateWindow

   push L 0                 ; lpParam

   push [hInst]             ; hInstance

   push L 0                 ; menu

   push L [newhwnd]                 ; parent hwnd

   push L CW_USEDEFAULT     ; height

   push L CW_USEDEFAULT     ; width

   push L CW_USEDEFAULT     ; y

   push L CW_USEDEFAULT     ; x

   push L WS_OVERLAPPEDWINDOW ; Style

   push offset szTitleName1  ; Title string

   push offset szClassName  ; Class name

   push L 0                 ; extra style

   call CreateWindowExA                        

   mov [new1hwnd], eax

   push L SW_SHOWNORMAL

   push [new1hwnd]

   call ShowWindow

   push [new1hwnd]

   call UpdateWindow

msg_loop:

   push L 0

   push L 0

   push L 0

   push offset msg

   call GetMessageA

   cmp ax, 0

   je end_loop

   push offset msg

   call TranslateMessage

   push offset msg

   call DispatchMessageA

   jmp msg_loop

end_loop:

   push [msg.msWPARAM]

   call ExitProcess

   ; we never get to here

;оконная процедура

;-----------------------------------------------------------------------------

WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD,\

                                           wparam:DWORD, lparam:DWORD

;               

; WARNING: Win32 requires that EBX, EDI, and ESI be preserved! We comply

; with this by listing those regs after the 'uses' statement in the 'proc'

 

; line. This allows the Assembler to save them for us.

;

LOCAL hDC:DWORD

   cmp [wmsg], WM_DESTROY

   je wmdestroy

   cmp [wmsg], WM_SIZE

   je wmsize

   cmp [wmsg], WM_CREATE

   je wmcreate

   cmp    [wmsg],WM_PAINT

    je         wmpaint

   jmp defwndproc

   wmcreate:

   mov eax, 0

   jmp finish

   defwndproc:

   push [lparam]

   push [wparam]

   push [wmsg]

   push [hwnd]

   call DefWindowProcA

   jmp finish

   wmdestroy:

   push L 0

   call PostQuitMessage

   mov eax, 0

   jmp     finish

   wmsize:

   mov eax, 0

   jmp finish

    wmpaint:

   push offset lppaint

   push [hwnd]

   call BeginPaint

   mov [hDC],eax

   push   L 17

   ; push ecx

       push offset Buffer

       push L 5

       push L 5

       push [hDC]

       call TextOutA

    push offset lppaint

   push [hwnd]

   call EndPaint

 

       mov eax,0

       jmp finish

finish:

   ret

WndProc     endp

;-----------------------------------------------------------------------------

public WndProc

end start

 

 

Библиографический список

 

1. Использование Turbo Assembler при разработке программ / Составитель А.А. Чекатков. Киев: Диалектика, 1995.

2. Рихтер Д. Windows для профессионалов ( программирование в Win32 API для Windows

NT 3.5 и Windows 95) пер. С англ. М.: Издательский отдел «Русский Редакция» ТОО «Channel Trading Ltd», 1995.

3. Зубков С.В. Assembler. Для DOS, Windows и Unix. М. : ДМК. 1999.



2019-07-03 182 Обсуждений (0)
Программа демонстрирующая иерархию окон Windows » 0.00 из 5.00 0 оценок









Обсуждение в статье: Программа демонстрирующая иерархию окон Windows »

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (182)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)