.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