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

Информация - Компьютеры, программирование

Другие материалы по предмету Компьютеры, программирование

уль.

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

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

WinMain:

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

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

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

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

:в wcl.cbCIZE

movwcl.style,CS_HREDRAW+CS_VREDRAW"> mov wcl.style,CS_HREDRAW+CS_VREDRAW

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

movwcl.cbCisExtra,0"> mov wcl.cbCisExtra,0

movwcl.cbWndExtra,0"> mov wcl.cbWndExtra,0

mov eax,hInst

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

movwcl.hInstance,eax"> mov wcl.hInstance, eax

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

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

push 0 ;NULL

саП LoadIconA

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

;структуры wcl

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

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

push 0

саll LoadCursorA

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

;структуры wc1

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

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

push WHITE_BRUSH

саП GetStockObject

movwcl.hbrBackground,eax"> mov wcl.hbrBackground, eax

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

movdwordptrwcl.lpszClassName,offsetszC1assName;"> mov dwordptrwcl.lpszClassName,offsetszC1assName; имя

;класса окна

movwcl.hIconSm,0"> mov wcl.hIconSm, 0

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

push offset wcl

саП RegisterClassExA

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

jz end_cyc1_msg ;неудача

;создаем окно:

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

LPCTSTR1pClassName,

; LPCTSTR 1pW1ndowName, DWORD dwStyle, int x, int у, int nWidth,

|;int nHeight,

; HWND hWndParent, HMENU hMenu, HANDLE hInstance, LPVOID

;lpParam)

push 0 ;lpParam

push hInst ;hInstance

push NULL ;menu

push NULL ;parent hwnd

push CW_USEDEFAULT ;высота окна

push CW_USEDEFAULT ;ширина окна

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

;окна

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

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

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

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

push NULL

саll CreateWindowExA

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

;показать окно:

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

push SW_SHOWNORMAL

push hwnd

call ShowWindow

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

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

push hwnd

call UpdateWindow

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

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

; UINTwMsgFilterMin,UINTwMsgFilterMax)

cycl_msg:

push 0

push 0

push NULL

push offset message

cal 1 GetMessageA

cmp ах, 0

je end_cycl_msg

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

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

push offset message

call TranslateMessage

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

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

push offset message

call DispatchMessageA

jmp cycl_msg

end_cycl_msg:

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

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

push NULL

call ExitProcess

start endp

; - - - - - - - - - - - - --WindowProc-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

WindowProc proc

argP0nwnd:DWORD, PPmes:DWORD, @@wparam:DWORD, @@lparam:DWORD

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

local @@hdc:DWORD

cmp @@mes, WM_DESTROY

je wmdestroy

cmp @@mes, WM_CREATE

je wmcreate

cmp @@mes, WM_PAINT

je wmpaint

jmp default

wmcreate:

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

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

;fdwSound )

push SND_SYNC+SND_FILENAME

push NULL

push offset playFileCreate

call PlaySoundA

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

jmp exit_wndproc

wmpaint:

push SND_SYNC+SND_FILENAME

push NULL

push offset playFIilePaint

call P1aySoundA

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

push offset ps

push @@hwnd

call BeginPaint

mov @@hdc,eax

;выведем строку текста в окно BOOL TextOut( HDC hdc. int nXStart, int

:nYStart.

; LPCTSTR lpString, int cbString )

push MesWindowLen

push offset MesWindow

push 100

push 10

push @@hdc

call TextOutA

push offset ps

push @@hdc