File compilato + sorgente qui: Calcolatrice32.zip
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
include \masm32\M32LIB\masm32.inc
includelib \masm32\M32LIB\masm32.lib
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
.const
IDC_BUTTON_PIU equ 100
IDC_BUTTON_MENO equ 101
IDC_BUTTON_PER equ 102
IDC_BUTTON_DIVISO equ 103
IDM_ESCI equ 1
IDC_EDIT equ 104
IDC_EDIT2 equ 105
IDC_EDIT3 equ 106
IDC_BUTTON_CANCELLA equ 107
.data
ClassName db "DIALOGCLASS",0
DlgName db "MyDialog",0
AppName db "Calcolatrice by NoRpiUs",0
MenuName db "MyMenu",0
impo db "Impossibile",0
inde db "Indeterminato",0
.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
.data?
numero1 dd 512 dup(?)
numero2 dd 512 dup(?)
risultato dd 512 dup(?)
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
invoke ExitProcess,eax
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hDlg: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,DLGWINDOWEXTRA
push hInst
pop wc.hInstance
mov wc.hbrBackground,COLOR_BTNFACE+1
mov wc.lpszMenuName,OFFSET MenuName
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 CreateDialogParam,hInstance,ADDR DlgName,NULL,NULL,NULL
mov hDlg,eax
invoke ShowWindow, hDlg,SW_SHOWNORMAL
invoke UpdateWindow, hDlg
.WHILE TRUE
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke IsDialogMessage, hDlg, ADDR msg
.IF eax ==FALSE
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDIF
.ENDW
mov eax,msg.wParam
ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg==WM_DESTROY
invoke MessageBoxA, hWnd, OFFSET tvb,OFFSET tvbt, MB_OK
invoke PostQuitMessage,NULL
.ELSEIF uMsg==WM_COMMAND
mov eax,wParam
.IF ax == IDM_ESCI
invoke SendMessageA, hWnd,WM_CLOSE,NULL,NULL
.ELSEIF ax == IDC_BUTTON_PIU
invoke GetDlgItemInt,hWnd,IDC_EDIT,NULL,FALSE
mov numero1, eax
invoke GetDlgItemInt,hWnd,IDC_EDIT2,NULL,FALSE
add eax, numero1
invoke SetDlgItemInt, hWnd, IDC_EDIT3, eax, TRUE
.ELSEIF ax == IDC_BUTTON_MENO
invoke GetDlgItemInt,hWnd,IDC_EDIT,NULL,FALSE
mov numero1, eax
invoke GetDlgItemInt,hWnd,IDC_EDIT2,NULL,FALSE
mov numero2, eax
mov eax, numero1
sub eax, numero2
invoke SetDlgItemInt, hWnd, IDC_EDIT3, eax, TRUE
.ELSEIF ax == IDC_BUTTON_PER
invoke GetDlgItemInt,hWnd,IDC_EDIT,NULL,FALSE
mov numero1, eax
invoke GetDlgItemInt,hWnd,IDC_EDIT2,NULL,FALSE
mov numero2, eax
mov eax, numero1
mov ebx, numero2
mul ebx
invoke SetDlgItemInt, hWnd, IDC_EDIT3, eax, TRUE
.ELSEIF ax == IDC_BUTTON_DIVISO
invoke GetDlgItemInt,hWnd,IDC_EDIT,NULL,FALSE
mov numero1, eax
invoke GetDlgItemInt,hWnd,IDC_EDIT2,NULL,FALSE
mov numero2, eax
cmp numero2, 0
je nnsepo
mov eax, numero1
mov ebx, numero2
div ebx
invoke SetDlgItemInt, hWnd, IDC_EDIT3, eax, TRUE
jmp fine
nnsepo: cmp numero1, 0
je nnsepo2
invoke SetDlgItemText, hWnd, IDC_EDIT3, offset impo
jmp fine
nnsepo2: invoke SetDlgItemText, hWnd, IDC_EDIT3, offset inde
fine:
.ELSEIF ax == IDC_BUTTON_CANCELLA
invoke SetDlgItemInt, hWnd, IDC_EDIT, NULL, TRUE
invoke SetDlgItemInt, hWnd, IDC_EDIT2, NULL, TRUE
invoke SetDlgItemInt, hWnd, IDC_EDIT3, NULL, TRUE
.ENDIF
.ELSE
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.ENDIF
xor eax,eax
ret
WndProc endp
end start
------------------------------ RSRC.RC ---------------------------------------
#define DS_3DLOOK 4
#define DS_MODALFRAME 128
#define DS_CENTER 2048
#define WS_OVERLAPPED 0
#define WS_VISIBLE 268435456
#define WS_CAPTION 12582912
#define WS_SYSMENU 524288
#define WS_TABSTOP 65536
#define WS_BORDER 8388608
#define WS_VSCROLL 2097152
#define ES_MULTILINE 4
#define ES_READONLY 2048
#define ES_UPPERCASE 8
#define IDM_ESCI 1
#define IDC_BUTTON_PIU 100
#define IDC_BUTTON_MENO 101
#define IDC_BUTTON_PER 102
#define IDC_BUTTON_DIVISO 103
#define IDC_EDIT 104
#define IDC_EDIT2 105
#define IDC_EDIT3 106
#define IDC_BUTTON_CANCELLA 107
IDI_APPICON ICON DISCARDABLE "Icon.ico"
MyDialog DIALOG 10, 10, 250, 130
STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_SYSMENU | WS_VISIBLE |
WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK
CAPTION "Calcolatrice by NoRpiUs"
CLASS "DIALOGCLASS"
BEGIN
DEFPUSHBUTTON "+", IDC_BUTTON_PIU, 200,10,30,30
DEFPUSHBUTTON "-", IDC_BUTTON_MENO, 160,10,30,30
DEFPUSHBUTTON "*", IDC_BUTTON_PER, 200,50,30,30
DEFPUSHBUTTON "/", IDC_BUTTON_DIVISO, 160,50,30,30
DEFPUSHBUTTON "Cancella tutto", IDC_BUTTON_CANCELLA, 160,85,70,26
EDITTEXT IDC_EDIT, 80,20,50,13, WS_TABSTOP
EDITTEXT IDC_EDIT2, 80,40,50,13, WS_TABSTOP
EDITTEXT IDC_EDIT3, 80,80,50,13, WS_TABSTOP
LTEXT "Numero uno", -1, 17,23,50,15
LTEXT "Numero due", -1, 17,43,50,15
LTEXT "Risultato", -1, 17,83,50,15
END
MyMenu MENU
{
POPUP "&File"
{
MENUITEM "&Esci",IDM_ESCI
}
}
|