Помогите,как использовать LineTo Это у меня не получается Код (Text): LOCAL hdc:HDC LOCAL ps:PAINTSTRUCT .if uMsg == WM_CLOSE invoke EndDialog, hWnd, NULL .elseif iMsg==WM_PAINT invoke BeginPaint,hWnd,addr ps mov hdc,eax invoke LineTo,addr hdc,10,10 ;Здесь ошибка invoke EndPaint,hWnd,addr ps
Код (Text): WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM LOCAL hdc:HDC LOCAL ps:PAINTSTRUCT LOCAL p:POINT .IF uMsg==WM_DESTROY invoke PostQuitMessage,NULL .ELSEIF uMsg==WM_PAINT invoke BeginPaint,hWnd,addr ps mov hdc,eax invoke MoveToEx,addr hdc,5,5,addr p ;ошибка invoke LineTo,addr hdc,10,10 ;ошибка invoke EndPaint,hWnd,addr ps .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF xor eax,eax ret WndProc endp end start так тоже не получается чего здесь не хватает
последний параметр необязателен. кстати, покажи ка как эта строчка скомпилировалась в экзешнике. (то есть последовательность push/.../push/call ) Я думаю, что надо написать hdc а не addr hdc. Скорее всего по addr hdc в стек запихивается просто разность ebp и смещения локальной переменной в стеке (точно хз - в масме не работал), а нужно само значение запихнуть.
D:\masm32\BIN\ML /c /coff /Cp /nologo /I"D:\masm32\INCLUDE" "D:\Programming\Programms\WinAsmStudio\Project\w.asm" Assembling: D:\Programming\Programms\WinAsmStudio\Project\w.asm D:\Programming\Programms\WinAsmStudio\Project\w.asm(105) : error A2006: undefined symbol : MoveToEx D:\Programming\Programms\WinAsmStudio\Project\w.asm(106) : error A2006: undefined symbol : LineTo
Я работал не один десяток раз, вот рабочий пример (fasm) Код (Text): format PE GUI 4.0 entry start include 'win32w.inc' section '.data' data readable writeable _class TCHAR 'FASMWIN32',0 _title TCHAR 'Win32 program',0 _error TCHAR 'Startup failed.',0 wc WNDCLASS 0,WindowProc,0,0,NULL,NULL,NULL,COLOR_BTNFACE+1,NULL,_class msg MSG ps PAINTSTRUCT hdc dd ? section '.code' code readable executable start: invoke GetModuleHandle,0 mov [wc.hInstance],eax invoke LoadIcon,0,IDI_APPLICATION mov [wc.hIcon],eax invoke LoadCursor,0,IDC_ARROW mov [wc.hCursor],eax invoke RegisterClass,wc test eax,eax jz error invoke CreateWindowEx,0,_class,_title,WS_VISIBLE+WS_DLGFRAME+WS_SYSMENU,128,128,256,192,NULL,NULL,[wc.hInstance],NULL test eax,eax jz error msg_loop: invoke GetMessage,msg,NULL,0,0 cmp eax,1 jb end_loop jne msg_loop invoke TranslateMessage,msg invoke DispatchMessage,msg jmp msg_loop error: invoke MessageBox,NULL,_error,NULL,MB_ICONERROR+MB_OK end_loop: invoke ExitProcess,[msg.wParam] proc WindowProc hwnd,wmsg,wparam,lparam push ebx esi edi cmp [wmsg],WM_DESTROY je .wmdestroy cmp [wmsg],WM_PAINT je .wmpaint .defwndproc: invoke DefWindowProc,[hwnd],[wmsg],[wparam],[lparam] jmp .finish .wmdestroy: invoke PostQuitMessage,0 xor eax,eax jmp .finish .wmpaint: invoke BeginPaint, [hwnd], ps mov [hdc], eax invoke MoveToEx, [hdc], 5, 5, 0 invoke LineTo, [hdc], 10, 10 invoke EndPaint, [hwnd], [hdc] .finish: pop edi esi ebx ret endp section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL',\ gdi32,'GDI32.DLL' include 'api\kernel32.inc' include 'api\user32.inc' include 'api\gdi32.inc'
shinkevichdmitry не видимо, а однозначно. Я ж говорю, тебе нужен хендл, а ты зачем-то кидаешь его адрес