Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- LPVOIND lpParam - ewentualny dodatkowy parametr - zwykle
- nie ma takiej potrzeby wiec wpisujemy tutaj '0'
- HINSTANCE hInstance - uchwyt instancji. Uchwyt instancji probieramy
- za pomoca GetModuleHandle - zwraca go w rejestrze EAX
- .code
- start:
- invoke GetModuleHandle,0
- mov hInstance,eax
- .data?
- hInstance HINSTANCE ?
- HMENU hMenu - uchwyt menu - w przypadku braku wpisujemy 0
- HWND hWndParent - uchwyt okna nadrzednego. W przypadku glownych okien aplikacji
- podajemy NULL lub 0 gdy tworzone okno bedzie oknem glownym
- int nHeight (gdy zostawimy zostanie ustawiona domyslna wartosc za pomoca CW_USED EFAULT)
- int nWidth
- int y (tez mozna CW_USEDEFAULT)
- int x (-----||-----)
- DWORD dwStyle - styl okna - kombinacja flag bitowych
- Stala WS_OVERLAPPEDWINDOW - stworzenie najzwyklejszego okna z paskiem i przycisk ami tytulu oraz skalowanym obramowaniem.
- Jest to jeden z czesciej stosowanych styli okna
- LPCTSTR lpWindowName - tytul okna - tekst pojawiajacy sie na pasku tytulu
- ====
- LPCTSTR lpClassName
- tutaj nalezy podac nazwe klasy. Najczesciej jest to nasza wlasna klasa zarejestr owana chwile wczesniej.
- Wartosc tego parametru powinna byc taka sama jak pola lpszClassName w strukturze WNDCLASSEX
- DWORD dwExStyle - rozszerzony styl okna - okresla zaawansowane aspekty okna. Naj czesciej wpisujemy tutaj 0
- W takim przypadku mozemy uzywac funkcji CreateWindow() ktora w ogole nei posiada parametru dwExStyle
- WCZESNIEJ MUSIMY TWORZYC KLASNE OKNA
- - Musimy zarejestrowac klase okna
- Nazwa klasy musi byc ukalna po ktorej mozna identyfikowac klase.
- Druga wazna rzecza jest procedura zdarzeniowa. ! WSZYSTKIE OKNA NALEZACE DO TEJ SAMEL KLASY UZYWAJA TEJ SAMEJ PROCEDURY ZDARZENIOWEJ !
- .code
- call WinMain
- .code
- invoke ExitProcess,0
- -- Procedura do rejestrowania klasy okna
- .code
- WinMain proc
- LOCAL KlasaOkna:WNDCLASSEX
- mov KlasaOkna.cbSize, sizeof(WNDCLASSEX)
- mov KlasaOkna.style, CS_HREDRAW or CS_VREDRAW
- mov KlasaOkna.lpfnWndProc, offset WndProc <- adres procedury obslugi zda rzen
- push hInstance
- pop KlasaOkna.hInstance <- uchwyt instancji
- mov KlasaOkna.hbrBackground, COLOR_WINDOW + 1
- mov KlasaOkna.lpszClassName, offset Klasa <- ustawienie className na pod stawie wartosci zmiennej Klasa
- Klasa jeszcze nie istnieje wiec musimy ja zdefiniowac wczesniej w zmiennej data
- .data
- Klasa db "WinClass", 0
- Wczytujemy ikony z zasobow systemowych
- invoke LoadIcon,0,IDI_APPLICATION
- mov KlasaOkna.hIcon,eax
- mov KlasaOkna.hIconSm, eax
- alternatywne ikoony
- IDI_ASTERISK
- IDI_EXCLAMATION
- IDI_HAND
- IDI_QUESTION
- IDI_WINLOGO
- ivoke LoadCursor,0,IDC_ARROW
- mov KlasaOkna.hCursor,eax
- alternatywne kursory:
- IDC_APPSTARTING
- IDC_IBEAM
- IDC_SIZE
- IDC_SIZENS
- IDC_UPNARROW
- IDC_ARROW
- IDC_ICON
- IDC_SIZEALL
- IDC_SIZENWSE
- IDC_WAIT
- IDC_CROSS
- IDC_NO
- IDC_SIZENESW
- jezeli mamy juz gotowe wszystkie info o klasie to rejestrujemy klase
- invoke RegisterClassEx, addr KlasaOkna
- invoke CreateWindowEx,
- 0, ; styl rozszerzoney
- addr Klasa, ;nazwa klasy
- addr TytulOkna, ;tytul
- WS_OVERLAPPEDWINDOW or WS_VISIBLE ; styl
- 100; ;x
- 100, ;y
- 320, ;width
- 200, ;height
- 0,;uchwyt okna nadrzednego
- 0,;uchwyt menu
- hInstance,;uchwyt instancji
- 0,;dodatkowe dane/opcje
- brakuje tytulu okna
- .data
- TytulOkna db "Moje pierwsze wymezone okno",0
- Za pobieranie komunikatow odpowiedzialna jest funkcja GetMessage()
- Umieszcza ona uzyskany komunikat w strukturze specjalnego typu MSG.
- dodajemy LOCAL msgKomunikat:MSG w polu deklaracji procedury WinMain
- KOD PETLI KOMUNIKATOR MOZE PRZEDSTAWIAC SIE NASTEPUJACO
- .WHILE TRUE
- invoke GetMessage,addr msg,0,0,0
- .BREAK .IF(!eax)
- invoke TranslateMessage, addr msg
- invoke DispatchMessage, addr msg
- .ENDW
- ret
- procedura zdarzeniowa ma dowolna nazwe
- WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
- .IF uMsg == WM_DESTROY
- invoke PostQuitMessage,0
- .ELSE
- invoke DefWindowProc,hWnd,uMsg,wPram,lParam
- ret
- .ENDIF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement