; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл .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 ToggleSwitch PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD MsgLoop PROTO :DWORD,:DWORD StaticFlat PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD .data? hInstance dd ? hIcon dd ? hCursor dd ? hWnd dd ? hEnde dd ? hAction dd ? hPlus dd ? hMinus dd ? hBearbeiten dd ? hAusgabe dd ? .data szClassName db "My_Class",0 slStatic db "STATIC",0 btnClass db "BUTTON",0 slEdit db "EDIT",0 szEnde db "--Ende--",0 szAction db "Taste 1",0 szPlus db "Taste 2",0 szMinus db "Taste 3",0 szState1 db "Zustand 1",0 szState2 db "Zustand 2",0 szState3 db "Zustand 3",0 szBeschreibung db " Das Beispielprogramm demonstriert",10,13,\ " die ▄bergabe von Daten an ein",10,13,\ " Fensterelement 2006 H.V.Viehof",0 szCaption db "Tasten ... ",0 szFiller db "Platzhalter",0 .code start: ; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл ; ; write your code here 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,240 ;+y= unten rechts 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,260,190,80,24,720 mov hEnde,eax invoke PushButton,ADDR szAction,hWnd,20,100,60,24,721 mov hAction, eax invoke PushButton,ADDR szPlus,hWnd,20,130,60,24,722 mov hPlus,eax invoke PushButton,ADDR szMinus,hWnd,20,160,60,24,723 mov hMinus, eax invoke StaticFlat,addr szBeschreibung,20,10,320,80,hWnd,730 mov hBearbeiten,eax invoke Static,addr szFiller,180,100,160,80,hWnd,731 mov hAusgabe,eax 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 SendMessage, hAusgabe, WM_SETTEXT, NULL, addr szState1 invoke UpdateWindow, hAusgabe .elseif wParam == 722 invoke SendMessage, hAusgabe, WM_SETTEXT, NULL, addr szState2 invoke UpdateWindow, hAusgabe .elseif wParam == 723 invoke SendMessage, hAusgabe, WM_SETTEXT, NULL, addr szState3 invoke UpdateWindow, hAusgabe .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 Static proc szMsg:DWORD,a:DWORD,b:DWORD, wd:DWORD,ht:DWORD,hParent:DWORD,ID:DWORD invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR slStatic,szMsg, WS_VISIBLE or WS_CHILDWINDOW or SS_LEFT, \ a,b,wd,ht,hParent,ID,hInstance,NULL ret Static endp StaticFlat proc szMsg:DWORD,a:DWORD,b:DWORD, wd:DWORD,ht:DWORD,hParent:DWORD,ID:DWORD invoke CreateWindowEx,WS_EX_STATICEDGE,ADDR slStatic,szMsg, WS_VISIBLE or WS_CHILDWINDOW or SS_LEFT, \ a,b,wd,ht,hParent,ID,hInstance,NULL ret StaticFlat endp ; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл end start