; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл .486 ; create 32 bit code .model flat, stdcall ; 32 bit memory model option casemap :none ; case sensitive include pbddemo.inc include \masm32\include\dialogs.inc FUNC MACRO parameters:VARARG invoke parameters EXITM ENDM dlgproc PROTO :DWORD,:DWORD,:DWORD,:DWORD Butn1Proc PROTO :DWORD,:DWORD,:DWORD,:DWORD .data? hInstance dd ? hIcon dd ? hButn1 dd ? hButn2 dd ? hButn3 dd ? hButn4 dd ? hButn5 dd ? hStat1 dd ? lpButn1Proc dd ? .code ; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл start: mov hInstance, FUNC(GetModuleHandle,NULL) mov hIcon, FUNC(LoadIcon,hInstance,500) call main invoke ExitProcess,eax ; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл main proc LOCAL icce:INITCOMMONCONTROLSEX mov icce.dwSize, SIZEOF INITCOMMONCONTROLSEX mov icce.dwICC, ICC_WIN95_CLASSES invoke InitCommonControlsEx,ADDR icce Dialog "Prebuilt Library Dialog Demo", \; caption "MS Sans Serif",8, \ ; font,pointsize WS_OVERLAPPED or \ ; styles for WS_SYSMENU or DS_CENTER, \ ; dialog window 6, \ ; number of controls 50,50,180,105, \ ; x y co-ordinates 1024 ; memory buffer size DlgButton "Cancel" ,WS_TABSTOP,126,10,40,13,IDCANCEL DlgButton "GetText" ,WS_TABSTOP,10,10,50,13,100 DlgButton "AboutBox",WS_TABSTOP,10,25,50,13,101 DlgButton "GetFile" ,WS_TABSTOP,10,40,50,13,102 DlgButton "GetIP" ,WS_TABSTOP,10,55,50,13,103 DlgStatic 0 ,SS_LEFT or WS_TABSTOP,10,75,160,9,104 CallModalDialog hInstance,0,dlgproc,NULL ret main endp ; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл dlgproc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD LOCAL hDC :DWORD LOCAL hMem$ :DWORD LOCAL var :DWORD LOCAL ps :PAINTSTRUCT LOCAL rct :RECT LOCAL buffer[32]:BYTE .if uMsg == WM_INITDIALOG invoke SendMessage,hWin,WM_SETICON,1,hIcon ; ----------------------- ; get the button handles ; ----------------------- invoke GetDlgItem,hWin,100 mov hButn1, eax invoke GetDlgItem,hWin,101 mov hButn2, eax invoke GetDlgItem,hWin,102 mov hButn3, eax invoke GetDlgItem,hWin,103 mov hButn4, eax invoke GetDlgItem,hWin,IDCANCEL mov hButn5, eax invoke GetDlgItem,hWin,104 mov hStat1, eax ; ------------------------------------------------------ ; set all of the buttons to the same subclass procedure ; ------------------------------------------------------ invoke SetWindowLong,hButn1,GWL_WNDPROC,Butn1Proc invoke SetWindowLong,hButn2,GWL_WNDPROC,Butn1Proc invoke SetWindowLong,hButn3,GWL_WNDPROC,Butn1Proc invoke SetWindowLong,hButn4,GWL_WNDPROC,Butn1Proc invoke SetWindowLong,hButn5,GWL_WNDPROC,Butn1Proc mov lpButn1Proc, eax .elseif uMsg == WM_COMMAND .if wParam == IDCANCEL jmp quit_dialog .elseif wParam == 100 stralloc 256 mov hMem$, eax invoke GetTextInput,hWin,hInstance,hIcon, SADD("Find Text"),SADD("Press F3 for next"),hMem$ mov eax, hMem$ cmp BYTE PTR [eax], 0 je @F invoke MessageBox,hWin,hMem$, SADD("You typed ...."),MB_OK @@: .elseif wParam == 101 invoke AboutBox,hWin,hInstance,hIcon, SADD("Prebuilt Library Dialog Demo"), SADD("MASM32 Dialogs With No Dialog Editor"), SADD("Copyright й 1998-2003",13,10,"MASM32",13,10,"All Right Reserved") .elseif wParam == 102 stralloc 260 mov hMem$, eax invoke GetFile,hWin,hInstance,hIcon,SADD("Please Select File"), SADD("c:\windows\system"),SADD("*.*"),hMem$ mov eax, hMem$ cmp BYTE PTR [eax], 0 je @F invoke MessageBox,hWin,hMem$, SADD("Selected File"),MB_OK @@: strfree hMem$ .elseif wParam == 103 invoke GetIP,hWin,hInstance,hIcon, SADD("Internet Connection"), SADD("Change IP if required"), MakeIP(121,32,254,201) .if eax != -1 mov var, eax invoke IPtoString,var,ADDR buffer invoke MessageBox,hWin,ADDR buffer, SADD("Returned IP"),MB_OK .else invoke MessageBox,hWin,SADD("Cancel was pressed"),SADD("Message"),MB_OK .endif .endif .elseif uMsg == WM_PAINT invoke BeginPaint,hWin,ADDR ps mov hDC, eax invoke GetClientRect,hWin,ADDR rct invoke DrawEdge,hDC,ADDR rct,EDGE_ETCHED,BF_RECT invoke EndPaint,hWin,ADDR ps .elseif uMsg == WM_MOUSEMOVE invoke SendMessage,hStat1,WM_SETTEXT,0,SADD(0) .elseif uMsg == WM_CLOSE quit_dialog: invoke EndDialog,hWin,0 .endif xor eax, eax ret dlgproc endp ; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл Butn1Proc proc hCtl :DWORD, uMsg :DWORD, wParam :DWORD, lParam :DWORD .if uMsg == WM_MOUSEMOVE invoke SetFocus,hCtl mov eax, hCtl .if eax == hButn1 invoke SendMessage,hStat1,WM_SETTEXT,0,SADD("Dialog To Get Text Fom The User") .elseif eax == hButn2 invoke SendMessage,hStat1,WM_SETTEXT,0,SADD("Dialog For Copyright And Other Information") .elseif eax == hButn3 invoke SendMessage,hStat1,WM_SETTEXT,0,SADD("Dialog To Get A File Name From A Directory") .elseif eax == hButn4 invoke SendMessage,hStat1,WM_SETTEXT,0,SADD("Dialog To Get Or Set An IP Address") .elseif eax == hButn5 invoke SendMessage,hStat1,WM_SETTEXT,0,SADD("Close This Dialog") .endif .endif invoke CallWindowProc,lpButn1Proc,hCtl,uMsg,wParam,lParam ret Butn1Proc endp ; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл end start