MASM рисование графических примитивов линий

Тема в разделе "WASM.BEGINNERS", создана пользователем shinkevichdmitry, 8 июн 2007.

  1. shinkevichdmitry

    shinkevichdmitry New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2007
    Сообщения:
    13
    Помогите,как использовать LineTo

    Это у меня не получается

    Код (Text):
    1. LOCAL hdc:HDC
    2. LOCAL ps:PAINTSTRUCT
    3. .if uMsg == WM_CLOSE
    4. invoke  EndDialog, hWnd, NULL
    5.       .elseif  iMsg==WM_PAINT
    6.              invoke BeginPaint,hWnd,addr ps
    7.     mov hdc,eax
    8.     invoke LineTo,addr hdc,10,10    ;Здесь ошибка
    9.     invoke EndPaint,hWnd,addr ps
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    А кто сделает MoveToEx ?
     
  3. shinkevichdmitry

    shinkevichdmitry New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2007
    Сообщения:
    13
    Код (Text):
    1. WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    2.  LOCAL hdc:HDC
    3.  LOCAL ps:PAINTSTRUCT
    4.  LOCAL p:POINT
    5.        .IF uMsg==WM_DESTROY
    6.            invoke PostQuitMessage,NULL
    7.         .ELSEIF uMsg==WM_PAINT
    8.             invoke BeginPaint,hWnd,addr ps
    9.             mov hdc,eax
    10.             invoke MoveToEx,addr hdc,5,5,addr p        ;ошибка
    11.             invoke LineTo,addr hdc,10,10                   ;ошибка
    12.                 invoke EndPaint,hWnd,addr ps  
    13.         .ELSE
    14.            invoke DefWindowProc,hWnd,uMsg,wParam,lParam
    15.            ret
    16.        .ENDIF
    17.        xor    eax,eax
    18.        ret
    19.    WndProc endp
    20. end start
    так тоже не получается
    чего здесь не хватает
     
  4. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    а че ты addr hdc указываешь, а не hdc???
     
  5. shinkevichdmitry

    shinkevichdmitry New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2007
    Сообщения:
    13
    Локальная переменная
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    последний параметр необязателен.
    кстати, покажи ка как эта строчка скомпилировалась в экзешнике. (то есть последовательность push/.../push/call )
    Я думаю, что надо написать hdc а не addr hdc.
    Скорее всего по addr hdc в стек запихивается просто разность ebp и смещения локальной переменной в стеке (точно хз - в масме не работал), а нужно само значение запихнуть.
     
  7. shinkevichdmitry

    shinkevichdmitry New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2007
    Сообщения:
    13
    Может с этими ф-ми кто нибудь работал?
    кроме этого может надо указать кисть или область отрисовки?
     
  8. shinkevichdmitry

    shinkevichdmitry New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2007
    Сообщения:
    13
    Ошибка eщё при компиляции
     
  9. shinkevichdmitry

    shinkevichdmitry New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2007
    Сообщения:
    13
    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
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Я работал не один десяток раз, вот рабочий пример (fasm)

    Код (Text):
    1. format PE GUI 4.0
    2. entry start
    3.  
    4. include 'win32w.inc'
    5.  
    6. section '.data' data readable writeable
    7.  
    8.   _class TCHAR 'FASMWIN32',0
    9.   _title TCHAR 'Win32 program',0
    10.   _error TCHAR 'Startup failed.',0
    11.  
    12.   wc WNDCLASS 0,WindowProc,0,0,NULL,NULL,NULL,COLOR_BTNFACE+1,NULL,_class
    13.  
    14.   msg MSG
    15.  
    16.   ps PAINTSTRUCT
    17.   hdc dd ?
    18.  
    19. section '.code' code readable executable
    20.  
    21.   start:
    22.  
    23.         invoke  GetModuleHandle,0
    24.         mov     [wc.hInstance],eax
    25.         invoke  LoadIcon,0,IDI_APPLICATION
    26.         mov     [wc.hIcon],eax
    27.         invoke  LoadCursor,0,IDC_ARROW
    28.         mov     [wc.hCursor],eax
    29.         invoke  RegisterClass,wc
    30.         test    eax,eax
    31.         jz      error
    32.  
    33.         invoke  CreateWindowEx,0,_class,_title,WS_VISIBLE+WS_DLGFRAME+WS_SYSMENU,128,128,256,192,NULL,NULL,[wc.hInstance],NULL
    34.         test    eax,eax
    35.         jz      error
    36.  
    37.   msg_loop:
    38.         invoke  GetMessage,msg,NULL,0,0
    39.         cmp     eax,1
    40.         jb      end_loop
    41.         jne     msg_loop
    42.         invoke  TranslateMessage,msg
    43.         invoke  DispatchMessage,msg
    44.         jmp     msg_loop
    45.  
    46.   error:
    47.         invoke  MessageBox,NULL,_error,NULL,MB_ICONERROR+MB_OK
    48.  
    49.   end_loop:
    50.         invoke  ExitProcess,[msg.wParam]
    51.  
    52. proc WindowProc hwnd,wmsg,wparam,lparam
    53.         push    ebx esi edi
    54.         cmp     [wmsg],WM_DESTROY
    55.         je      .wmdestroy
    56.         cmp     [wmsg],WM_PAINT
    57.         je      .wmpaint
    58.   .defwndproc:
    59.         invoke  DefWindowProc,[hwnd],[wmsg],[wparam],[lparam]
    60.         jmp     .finish
    61.   .wmdestroy:
    62.         invoke  PostQuitMessage,0
    63.         xor     eax,eax
    64.         jmp     .finish
    65.   .wmpaint:
    66.         invoke  BeginPaint, [hwnd], ps
    67.         mov     [hdc], eax
    68.         invoke  MoveToEx, [hdc], 5, 5, 0
    69.         invoke  LineTo, [hdc], 10, 10
    70.         invoke  EndPaint, [hwnd], [hdc]
    71.   .finish:
    72.         pop     edi esi ebx
    73.         ret
    74. endp
    75.  
    76. section '.idata' import data readable writeable
    77.  
    78.   library kernel32,'KERNEL32.DLL',\
    79.           user32,'USER32.DLL',\
    80.           gdi32,'GDI32.DLL'
    81.  
    82.   include 'api\kernel32.inc'
    83.   include 'api\user32.inc'
    84.   include 'api\gdi32.inc'
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Ну дык надо подключить GDI32.INC наверное?
     
  12. shinkevichdmitry

    shinkevichdmitry New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2007
    Сообщения:
    13
    Cпасибо.GDI32.INC забыл.Компиляция успешно прошла,но ничего не
    рисуется.Рассмoтрю пример на FASM.
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    shinkevichdmitry
    Кинь бинарник сюда. Скорее всего, нужно не addr hdc, а [hdc] передавать
     
  14. shinkevichdmitry

    shinkevichdmitry New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2007
    Сообщения:
    13
    Всё всем огромное спасибо.Всё работает,убрал addr.Почему так?
     
  15. shinkevichdmitry

    shinkevichdmitry New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2007
    Сообщения:
    13
    Это передача значений видимо
     
  16. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Ясен пень, что надо передать сам hdc, а не его адрес. Об этом выше сказали уже раз 10
    Ппц просто=\
     
  17. shinkevichdmitry

    shinkevichdmitry New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2007
    Сообщения:
    13
    Работает
     
  18. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    shinkevichdmitry
    не видимо, а однозначно. Я ж говорю, тебе нужен хендл, а ты зачем-то кидаешь его адрес
     
  19. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    shinkevichdmitry
    А я бы сделал так (см. в аттаче)