;=============================================================================== ; Mosaic.asm ;=============================================================================== .486 .model flat, stdcall option casemap: none includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\comctl32.lib includelib \masm32\lib\comdlg32.lib include \masm32\include\kernel32.inc include \masm32\include\comctl32.inc include \masm32\include\comdlg32.inc include \masm32\include\user32.inc include \masm32\include\gdi32.inc include \masm32\include\windows.inc include mosaic.inc WinMain PROTO STDCALL :DWORD, :DWORD, :DWORD, :DWORD WndProc PROTO STDCALL :DWORD, :DWORD, :DWORD, :DWORD .data AppName db "Mosaic",0 ClassName db "Mosaic32",0 .data? hInstance dd ? hMenu dd ? .code start: ; Get module handle and save it invoke GetModuleHandle, NULL mov hInstance, eax ; Init Common Controls library invoke InitCommonControls ; Run winmain procedure and exit program invoke WinMain, hInstance, NULL, NULL, SW_SHOWNORMAL invoke ExitProcess,eax ;=============================================================================== ; WinMain ;=============================================================================== 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 hInstance pop wc.hInstance mov wc.hbrBackground,COLOR_WINDOW mov wc.lpszMenuName, NULL mov wc.lpszClassName,OFFSET ClassName invoke LoadIcon, hInstance, ICON1_BIG mov wc.hIcon, eax invoke LoadIcon, hInstance, ICON2_SMALL mov wc.hIconSm, eax invoke LoadCursor,NULL,IDC_ARROW mov wc.hCursor,eax invoke RegisterClassEx, addr wc invoke LoadMenu, hInstance, MAINMENU ;load menu mov hMenu, eax ;store handle INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\ WS_OVERLAPPEDWINDOW-WS_MAXIMIZEBOX-WS_SIZEBOX,\ CW_USEDEFAULT, CW_USEDEFAULT,258,350,NULL,hMenu,\ hInst,NULL mov hwnd,eax invoke ShowWindow, hwnd, CmdShow invoke UpdateWindow, hwnd .WHILE TRUE invoke GetMessage, ADDR msg,NULL,0,0 .BREAK .IF (!eax) invoke TranslateMessage, ADDR msg invoke DispatchMessage, ADDR msg .ENDW mov eax,msg.wParam ret WinMain endp ;=============================================================================== ; Window procedure ;=============================================================================== WndProc proc hWnd:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD mov eax, uMsg .IF eax==WM_CREATE ; yet to do .ELSEIF eax==WM_DESTROY invoke PostQuitMessage, NULL .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF ret WndProc endp end start