Advertisement
ifinox

MASM TWORZENIE OKIEN

Dec 19th, 2018
240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. LPVOIND lpParam - ewentualny dodatkowy parametr - zwykle
  2.         nie ma takiej potrzeby wiec wpisujemy tutaj '0'
  3.  
  4. HINSTANCE hInstance - uchwyt instancji. Uchwyt instancji probieramy
  5.         za pomoca GetModuleHandle - zwraca go w rejestrze EAX
  6.  
  7. .code
  8. start:
  9.         invoke GetModuleHandle,0
  10.         mov     hInstance,eax
  11. .data?
  12. hInstance HINSTANCE ?
  13.  
  14. HMENU hMenu - uchwyt menu - w przypadku braku wpisujemy 0
  15.  
  16. HWND hWndParent - uchwyt okna nadrzednego. W przypadku glownych okien aplikacji
  17.         podajemy NULL lub 0 gdy tworzone okno bedzie oknem glownym
  18.  
  19. int nHeight (gdy zostawimy zostanie ustawiona domyslna wartosc za pomoca CW_USED                                                                                                                                   EFAULT)
  20. int nWidth
  21. int y (tez mozna CW_USEDEFAULT)
  22. int x (-----||-----)
  23.  
  24. DWORD dwStyle - styl okna - kombinacja flag bitowych
  25. Stala WS_OVERLAPPEDWINDOW - stworzenie najzwyklejszego okna z paskiem i przycisk                                                                                                                                   ami tytulu oraz skalowanym obramowaniem.
  26.         Jest to jeden z czesciej stosowanych styli okna
  27.  
  28. LPCTSTR lpWindowName - tytul okna - tekst pojawiajacy sie na pasku tytulu
  29.  
  30. ====
  31.  
  32. LPCTSTR lpClassName
  33. tutaj nalezy podac nazwe klasy. Najczesciej jest to nasza wlasna klasa zarejestr                                                                                                                                   owana chwile wczesniej.
  34. Wartosc tego parametru powinna byc taka sama jak pola lpszClassName w strukturze                                                                                                                                    WNDCLASSEX
  35.  
  36. DWORD dwExStyle - rozszerzony styl okna - okresla zaawansowane aspekty okna. Naj                                                                                                                                   czesciej wpisujemy tutaj 0
  37. W takim przypadku mozemy uzywac funkcji CreateWindow() ktora w ogole nei posiada                                                                                                                                    parametru dwExStyle
  38.  
  39.  
  40. WCZESNIEJ MUSIMY TWORZYC KLASNE OKNA
  41.  
  42. - Musimy zarejestrowac klase okna
  43. Nazwa klasy musi byc ukalna po ktorej mozna identyfikowac klase.
  44. Druga wazna rzecza jest procedura zdarzeniowa. ! WSZYSTKIE OKNA NALEZACE DO TEJ                                                                                                                                    SAMEL KLASY UZYWAJA TEJ SAMEJ PROCEDURY ZDARZENIOWEJ !
  45.  
  46.  
  47.  
  48. .code
  49.         call WinMain
  50.  
  51. .code
  52.         invoke ExitProcess,0
  53.  
  54.  
  55. -- Procedura do rejestrowania klasy okna
  56.  
  57. .code
  58. WinMain proc
  59.         LOCAL KlasaOkna:WNDCLASSEX
  60.         mov KlasaOkna.cbSize, sizeof(WNDCLASSEX)
  61.         mov KlasaOkna.style, CS_HREDRAW or CS_VREDRAW
  62.         mov KlasaOkna.lpfnWndProc, offset WndProc <- adres procedury obslugi zda                                                                                                                                   rzen
  63.         push hInstance
  64.         pop KlasaOkna.hInstance <- uchwyt instancji
  65.         mov KlasaOkna.hbrBackground, COLOR_WINDOW + 1
  66.         mov KlasaOkna.lpszClassName, offset Klasa <- ustawienie className na pod                                                                                                                                   stawie wartosci zmiennej Klasa
  67.  
  68. Klasa jeszcze nie istnieje wiec musimy ja zdefiniowac wczesniej w zmiennej data
  69.  
  70. .data
  71. Klasa db "WinClass", 0
  72.  
  73.  
  74. Wczytujemy ikony z zasobow systemowych
  75.  
  76. invoke LoadIcon,0,IDI_APPLICATION
  77. mov KlasaOkna.hIcon,eax
  78. mov KlasaOkna.hIconSm, eax
  79.  
  80. alternatywne ikoony
  81. IDI_ASTERISK
  82. IDI_EXCLAMATION
  83. IDI_HAND
  84. IDI_QUESTION
  85. IDI_WINLOGO
  86.  
  87. ivoke LoadCursor,0,IDC_ARROW
  88. mov KlasaOkna.hCursor,eax
  89.  
  90. alternatywne kursory:
  91. IDC_APPSTARTING
  92. IDC_IBEAM
  93. IDC_SIZE
  94. IDC_SIZENS
  95. IDC_UPNARROW
  96. IDC_ARROW
  97. IDC_ICON
  98. IDC_SIZEALL
  99. IDC_SIZENWSE
  100. IDC_WAIT
  101. IDC_CROSS
  102. IDC_NO
  103. IDC_SIZENESW
  104.  
  105. jezeli mamy juz gotowe wszystkie info o klasie to rejestrujemy klase
  106.  
  107. invoke RegisterClassEx, addr KlasaOkna
  108.  
  109.  
  110. invoke CreateWindowEx,
  111.         0,      ; styl rozszerzoney
  112.         addr Klasa,     ;nazwa klasy
  113.         addr TytulOkna, ;tytul
  114.         WS_OVERLAPPEDWINDOW or WS_VISIBLE       ; styl
  115.         100; ;x
  116.         100, ;y
  117.         320, ;width
  118.         200, ;height
  119.         0,;uchwyt okna nadrzednego
  120.         0,;uchwyt menu
  121.         hInstance,;uchwyt instancji
  122.         0,;dodatkowe dane/opcje
  123.  
  124. brakuje tytulu okna
  125. .data
  126. TytulOkna db "Moje pierwsze wymezone okno",0
  127.  
  128. Za pobieranie komunikatow odpowiedzialna jest funkcja GetMessage()
  129.  
  130. Umieszcza ona uzyskany komunikat w strukturze specjalnego typu MSG.
  131. dodajemy LOCAL msgKomunikat:MSG w polu deklaracji procedury WinMain
  132.  
  133. KOD PETLI KOMUNIKATOR MOZE PRZEDSTAWIAC SIE NASTEPUJACO
  134.  
  135. .WHILE TRUE
  136.         invoke GetMessage,addr msg,0,0,0
  137.         .BREAK .IF(!eax)
  138.         invoke TranslateMessage, addr msg
  139.         invoke DispatchMessage, addr msg
  140. .ENDW
  141. ret
  142.  
  143. procedura zdarzeniowa ma dowolna nazwe
  144.  
  145. WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
  146.  
  147. .IF uMsg == WM_DESTROY
  148.         invoke PostQuitMessage,0
  149.  
  150. .ELSE
  151.         invoke DefWindowProc,hWnd,uMsg,wPram,lParam
  152.         ret
  153. .ENDIF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement