133 lines
No EOL
2.9 KiB
NASM
133 lines
No EOL
2.9 KiB
NASM
.386
|
|
.model flat,stdcall
|
|
option casemap:none
|
|
|
|
WinMain proto :DWORD
|
|
|
|
include c:\masm32\include\windows.inc
|
|
include c:\masm32\include\gdi32.inc
|
|
include c:\masm32\include\gdiplus.inc
|
|
include c:\masm32\include\user32.inc
|
|
include c:\masm32\include\kernel32.inc
|
|
|
|
includelib c:\masm32\lib\kernel32.lib
|
|
includelib c:\masm32\lib\gdi32.lib
|
|
includelib c:\masm32\lib\user32.lib
|
|
|
|
RGB macro red,green,blue
|
|
xor eax,eax
|
|
mov ah,blue
|
|
shl eax,8
|
|
mov ah,green
|
|
mov al,red
|
|
endm
|
|
|
|
.DATA
|
|
ClassName db "SimpleWinClass",0
|
|
AppName db "Our First Window",0
|
|
GlobX DWORD 10
|
|
Delta DWORD 8
|
|
|
|
.DATA?
|
|
hInstance HINSTANCE ?
|
|
|
|
.CODE
|
|
start:
|
|
invoke GetModuleHandle, NULL
|
|
mov hInstance,eax
|
|
invoke WinMain, hInstance;, NULL, NULL, SW_SHOWDEFAULT
|
|
|
|
invoke ExitProcess,eax
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; Fonction principale
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
WinMain proc hInst:HINSTANCE;, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORD
|
|
LOCAL wc:WNDCLASSEX
|
|
LOCAL msg:MSG
|
|
LOCAL hwnd:HWND
|
|
mov wc.cbSize,SIZEOF WNDCLASSEX
|
|
mov wc.style, CS_HREDRAW or CS_VREDRAW
|
|
mov wc.lpfnWndProc, OFFSET WndProc
|
|
mov wc.cbClsExtra,NULL
|
|
mov wc.cbWndExtra,NULL
|
|
push hInst
|
|
pop wc.hInstance
|
|
mov wc.hbrBackground,COLOR_WINDOW+1
|
|
mov wc.lpszMenuName,NULL
|
|
mov wc.lpszClassName,OFFSET ClassName
|
|
invoke LoadIcon,NULL,IDI_APPLICATION
|
|
mov wc.hIcon,eax
|
|
mov wc.hIconSm,eax
|
|
invoke LoadCursor,NULL,IDC_ARROW
|
|
mov wc.hCursor,eax
|
|
invoke RegisterClassEx, addr wc
|
|
invoke CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
|
|
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
|
|
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\
|
|
hInst,NULL
|
|
mov hwnd,eax
|
|
invoke ShowWindow, hwnd,SW_SHOWNORMAL
|
|
invoke UpdateWindow, hwnd
|
|
|
|
; boucle de gestion des evenements
|
|
main_loop:
|
|
invoke GetMessage, ADDR msg,NULL,0,0
|
|
cmp eax, 0
|
|
je end_loop
|
|
invoke TranslateMessage, ADDR msg
|
|
invoke DispatchMessage, ADDR msg
|
|
jmp main_loop
|
|
end_loop:
|
|
mov eax, msg.wParam
|
|
ret
|
|
|
|
WinMain endp
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; Fonction appelée à chaque evenement
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
|
|
LOCAL ps:PAINTSTRUCT
|
|
LOCAL rect:RECT
|
|
LOCAL hdc:HDC
|
|
|
|
; switch WM events
|
|
mov eax, uMsg
|
|
; WM_DESTROY event
|
|
cmp eax, WM_DESTROY
|
|
jne evt_not_destroy
|
|
invoke PostQuitMessage,NULL
|
|
jmp evt_switch_end
|
|
evt_not_destroy:
|
|
; WM_PAINT event
|
|
cmp eax, WM_PAINT
|
|
jne evt_not_paint
|
|
invoke BeginPaint,hWnd, ADDR ps
|
|
mov hdc,eax
|
|
invoke GetClientRect,hWnd, ADDR rect
|
|
|
|
; code de dessin
|
|
|
|
invoke EndPaint,hWnd, ADDR ps
|
|
jmp evt_switch_end
|
|
evt_not_paint:
|
|
; WM_CHAR event
|
|
cmp eax, WM_CHAR
|
|
jne evt_not_char
|
|
|
|
; gestion des evenements clavier
|
|
; le caractere recu est dans wParam
|
|
|
|
jmp evt_switch_end
|
|
evt_not_char:
|
|
; By default call DefWindowProc
|
|
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
|
|
ret
|
|
evt_switch_end:
|
|
xor eax, eax
|
|
ret
|
|
WndProc endp
|
|
|
|
end start |