after following your tips i have something like this now but i'm not sure on how to work with a buffer. so can someone explain me that ? or how to store data in a buffer. and i'm also not sure on the way i display my data.
.data?
buffer db 512 dup(?)
...
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL hdc:HDC
LOCAL ps:PAINTSTRUCT
LOCAL hfont:HFONT
.IF uMsg==WM_DESTROY
invoke DeleteObject,hfont
invoke EndPaint,hWnd,ADDR ps
invoke PostQuitMessage,NULL
.ELSEIF uMsg=WM_CREATE
invoke BeginPaint,hWnd,ADDR ps
mov hdc,eax
invoke CreateFont,24,16,0,0,400,0,0,0,OEM_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH or FF_SCRIPT,ADDR FontName
invoke SelectObject,hdc,eax
mov hfont,eax
.ELSEIF uMsg==WM_COMMAND
mov eax,wParam
.IF ax==IDM_TEST
invoke MessageBox,NULL,ADDR Test_string,OFFSET AppName,MB_OK
.ELSEIF ax==IDM_HELLO
invoke MessageBox, NULL,ADDR Hello_string, OFFSET AppName,MB_OK
.ELSEIF ax==IDM_GOODBYE
invoke MessageBox,NULL,ADDR Goodbye_string, OFFSET AppName, MB_OK
.ELSE
invoke DestroyWindow,hWnd
.ENDIF
.ELSEIF uMsg==WM_CHAR
push wParam
pop char
.ELSEIF uMsg==WM_LBUTTONDOWN
mov eax,lParam
and eax,0FFFFh
mov hitpoint.x,eax
mov eax,lParam
shr eax,16
mov hitpoint.y,eax
mov MouseClick,TRUE
invoke InvalidateRect,hWnd,NULL,TRUE
.ELSEIF uMsg==WM_PAINT
.IF char==31h ;1
invoke lstrlen,ADDR buffer
invoke TextOut,hdc,hitpoint.x,hitpoint.y,ADDR buffer,eax
.ELSEIF char==32h;2
invoke lstrlen,ADDR buffer
invoke TextOut,hdc,hitpoint.x,hitpoint.y,ADDR buffer,eax
.ELSEIF char==33h ;3
invoke lstrlen,ADDR buffer
invoke TextOut,hdc,hitpoint.x,hitpoint.y,ADDR buffer,eax
.ELSE
invoke lstrlen,ADDR buffer
invoke TextOut,hdc,hitpoint.x,hitpoint.y,ADDR buffer,eax
.ENDIF
.ELSE
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.ENDIF
xor eax,eax
ret
WndProc endp