; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл .486 ; create 32 bit code .model flat, stdcall ; 32 bit memory model option casemap :none ; case sensitive include \masm32\include\windows.inc include \masm32\include\masm32.inc include \masm32\include\gdi32.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\Comctl32.inc include \masm32\include\comdlg32.inc include \masm32\include\shell32.inc include \masm32\include\oleaut32.inc include \masm32\include\msvcrt.inc includelib \masm32\lib\masm32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\Comctl32.lib includelib \masm32\lib\comdlg32.lib includelib \masm32\lib\shell32.lib includelib \masm32\lib\oleaut32.lib includelib \masm32\lib\msvcrt.lib WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD RegisterWinClass PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD Static PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD PushButton PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD MsgLoop PROTO :DWORD,:DWORD .data? hInstance dd ? hIcon dd ? hCursor dd ? hWnd dd ? hEnde dd ? hAction dd ? hPlus dd ? hBearbeiten dd ? hAusgabe dd ? .data xOrigin dd ? yOrigin dd ? IDC dd ? szClassName db "My_Class",0 slStatic db "STATIC",0 btnClass db "BUTTON",0 slEdit db "EDIT",0 szEnde db "--Ende--",0 szAction db "generate...",0 szButtex db "Fake :)",0 szCaption db "Buttonmania!!! й2006 IT Design / H.V.Viehof ",0 messCap db "gehts noch?",0 messText db "Wozu brauchst Du denn die ganzen KnЎpfe?" .code start: call Main invoke ExitProcess,eax ;----------------------------------------------------------------- Main proc LOCAL Wwd:DWORD,Wht:DWORD,Wtx:DWORD,Wty:DWORD mov Wtx,10 ;x koordinate oben links mov Wty,10 ;y koordinate oben links mov Wwd,360 ;+x= unten rechts mov Wht,320 ;+y= unten rechts mov dword ptr[xOrigin],20 mov dword ptr[yOrigin],40 mov dword ptr[IDC],722 invoke RegisterWinClass,ADDR WndProc,ADDR szClassName,hIcon,hCursor,COLOR_BTNFACE+1 invoke CreateWindowEx,WS_EX_TOOLWINDOW,ADDR szClassName,ADDR szCaption, WS_OVERLAPPEDWINDOW,Wtx,Wty,Wwd,Wht,NULL,NULL,hInstance,NULL mov hWnd,eax invoke PushButton,ADDR szEnde,hWnd,200,10,100,24,720 mov hEnde,eax invoke PushButton,ADDR szAction,hWnd,20,10,100,24,721 mov hAction, eax add dword ptr[yOrigin],32 invoke ShowWindow,hWnd, SW_SHOWNORMAL invoke UpdateWindow,hWnd invoke MsgLoop,0,hEnde invoke ExitProcess,eax ret Main endp ;--------------------------------------------------------------- m2m MACRO M1, M2 push M2 pop M1 ENDM ;--------------------------------------------------------------- RegisterWinClass proc lpWndProc:DWORD,lpClassName:DWORD,Icon:DWORD,Cursor:DWORD, bColor:DWORD LOCAL wc:WNDCLASSEX mov wc.cbSize, sizeof WNDCLASSEX mov wc.style, CS_BYTEALIGNCLIENT or CS_BYTEALIGNWINDOW or CS_NOCLOSE m2m wc.lpfnWndProc, lpWndProc mov wc.cbClsExtra, NULL mov wc.cbWndExtra, NULL m2m wc.hInstance, hInstance m2m wc.hbrBackground, bColor mov wc.lpszMenuName, NULL m2m wc.lpszClassName, lpClassName m2m wc.hIcon, Icon m2m wc.hCursor, Cursor m2m wc.hIconSm, Icon invoke RegisterClassEx,ADDR wc ret RegisterWinClass endp MsgLoop proc hMSG:DWORD,hENDE:DWORD LOCAL msg:MSG StartLoop: invoke GetMessage,ADDR msg,0,0,0 .if eax == 0 jmp ExitLoop .elseif msg.message == 0201h mov ecx,hENDE .if msg.hwnd == ecx jmp ExitLoop .endif .endif invoke DispatchMessage ,ADDR msg jmp StartLoop ExitLoop: mov eax, msg.wParam ret MsgLoop endp WndProc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD,hDOIT:DWORD LOCAL msg:MSG .if uMsg == WM_DESTROY invoke PostQuitMessage,NULL mov eax, 0 ret .elseif uMsg == WM_COMMAND .if wParam == 721 invoke PushButton,ADDR szButtex,hWin,dword ptr[xOrigin],dword ptr[yOrigin],60,24,dword ptr[IDC] invoke UpdateWindow, hWin inc dword ptr[IDC] .if dword ptr[IDC] >= 722+5 invoke MessageBox, 0, addr messText, addr messCap, MB_OK or MB_ICONEXCLAMATION .endif .if dword ptr[yOrigin] <= (6*32+40) add dword ptr[yOrigin],32 .else mov dword ptr[yOrigin],40 add dword ptr[xOrigin],64 .endif .endif .endif invoke DefWindowProc,hWin,uMsg,wParam,lParam ret WndProc endp PushButton proc lpText:DWORD,hParent:DWORD, a:DWORD,b:DWORD,wd:DWORD,ht:DWORD,ID:DWORD invoke CreateWindowEx,0, ADDR btnClass,lpText, WS_CHILD or WS_VISIBLE or BS_PUSHBUTTON or BS_NOTIFY, a,b,wd,ht,hParent,ID, hInstance,NULL ret PushButton endp end start