Простая графика

Тема в разделе "WASM.WIN32", создана пользователем Freecod, 15 май 2006.

  1. Freecod

    Freecod New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2006
    Сообщения:
    136
    Уважаемые, помогите разобратся с графикой. Нужно сделать: рисую квадрат (32x32) и нажимая UP DOWN LEFT RIGHT двигать его в соответств. стороны. по примерам я написал следующий код, но после перемещения старое положение квадрата не чистится и получается какая-то змейка.. но после свернуть\развернуть всё отрисовывается ок... ничего не пойм у, может кто нибудь обьяснит в чём косяк?



    []
     
  2. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    попробовать:


    Код (Text):
    1.  
    2. invoke InvalidateRect, hWnd,0,1
    3.  




    попробовать:



    WM_ERASEBKGND
     
  3. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Несколько проблем:



    1. BitBlt() и InvalidateRect() не должны идти друг за другом. Если надо немедленно перерисовать:


    Код (Text):
    1.  
    2. invoke InvalidateRect, hWnd, 0, 0
    3. invoke UpdateWindow, hWnd
    4.  




    2. Перед DeleteDC() надо сначала вызвать SelectObject() и убрать hMemDC из контекста.



    В принципе, всё что надо сделать - это на нажатие стрелок изменить координаты и сделать перерисовку как показано в п. 1
     
  4. Freecod

    Freecod New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2006
    Сообщения:
    136
    Отлично! invoke InvalidateRect, hWnd,0,1 помогло :) А как 'замостить' изображением весь контекст?
     
  5. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Нуно созать кисть для начала. Потом закрасить все при помощи какой-то ф-ции. Не помню точнороде бы PatBlt или что-то такое.
     
  6. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Если на то пошло, имхо в данном случае (при перемещении объектов) лучше использовать ф-ции ImageList_... вместо BitBlt.
     
  7. Freecod

    Freecod New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2006
    Сообщения:
    136
    Замучился с этим рисованием... Примеры в инете либо не то, либо слишком замутные. Очень прошу помочь: как нарисовать обьект? как наримсовать тот же обьект, не стерев преведущий? Как сделать приоритет рисунка - отрисовал картинку фона, отрисовал поверх картинку, переместил её в другое место, и фон не стёрт. Как нарисовать одну и ту-же картинку (LoadImage 1 раз) в окне не один раз? Вообщем моя задача - зарисовать картинкой (фон) 32x32 окно 224x224 и создать поверх другую картинку (player) 32x32 и сделать его перемещяемым. Очень прошу помочь.
     
  8. Consto

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    Freecod
    заново предыдущий нарисуй

    Freecod
    invoke LoadImage ...
    mov hBitmap,eax

    Freecod
    invoke CreatePatternBrush,hBitmap
    invoke SelectObject,DC окна,eax
    invoke DeleteObject,eax ;надо удалить старый битмап
    invoke Rectangle,.....и окно закрасится hBitmap-ом

    PS надо было подавать в wasm.beginners