Проблема прорисовки...помогите найти ошибку

Тема в разделе "WASM.WIN32", создана пользователем devillsd, 8 мар 2008.

  1. devillsd

    devillsd New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    131
    Ниже код обработки событий....в программе есть меню с двумя пунктами(Start/QUIT),когда нажимаеш кнопку старт,должен рисоваться элипс,так оно и происходит....но!!!!!Он почемуто через 3 секунды пропадает....всё бы нечего.... но когда нажимаю старт ещё раз, то кружок не пропадает....в чём моя проблема? ПОДСКАЖИТЕ ПЛИЗ!
    .IF uMsg==WM_COMMAND
    ;;;;;;;
    mov eax,wParam
    .IF ax==IDM_QUIT
    invoke DestroyWindow,hWnd
    .elseif ax==IDM_START
    invoke InvalidateRect,hWnd,addr rect,TRUE
    invoke BeginPaint,hWnd,addr ps
    mov hdc,eax
    invoke CreatePen,0,1,000000h
    mov blackpen,eax
    invoke SelectObject,hdc,blackpen
    invoke Ellipse,hdc,50,50,100,100
    invoke EndPaint,hWnd,addr ps
    mov hdc,eax
    ;;;;;;;
    .endif
    ;;;;;;;

    .ELSEIF uMsg==WM_MOUSEMOVE
    mov eax,lParam
    and eax,0FFFFh
    mov xmc,eax
    mov eax,lParam
    shr eax,16
    mov ymc,eax
    .ELSEIF uMsg==WM_LBUTTONDOWN
    .ELSEIF uMsg==WM_DESTROY
    invoke PostQuitMessage,NULL
    .ELSE
    invoke DefWindowProc,hWnd,uMsg,wParam,lParam
    ret
    .ENDIF
     
  2. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Код рисования должен быть помещён в обработчик WM_PAINT,а не WM_COMMAND, т.к. получается что он вызывается только при нажатии на что-нибудь.
    Кажется так должно быть:
    Код (Text):
    1. .elseif ax==IDM_START
    2.  
    3.                 invoke CreatePen,0,1,000000h
    4.                 mov blackpen,eax
    5.                 invoke SelectObject,hdc,blackpen
    6.                 mov paintflag,1
    Код (Text):
    1. .ELSEIF uMsg==WM_PAINT
    2.                     .if paintflag==1
    3.                     invoke InvalidateRect,hWnd,addr rect,TRUE
    4.                     invoke BeginPaint,hWnd,addr ps
    5.                     mov hdc,eax
    6.                     invoke Ellipse,hdc,50,50,100,100
    7.                     invoke EndPaint,hWnd,addr ps
    8.                     mov hdc,eax
    9.                     .endif
     
  3. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Также утечка ресурсов: то что создано через CreatePen() должно быть удалено через DeleteObject(). Кроме того, То что выбрано через SelectObject() должно быть возвращено на место перед окончанием рисования. Посмотри на описание SelectObject():

    http://msdn2.microsoft.com/en-us/library/ms533272(VS.85).aspx

    Про создание объектов типа HPEN:

    http://msdn2.microsoft.com/en-us/library/ms535467(VS.85).aspx
     
  4. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    100%

    Помню как сам на этом попалился :)
    А работал с видео, вот там то быстро они заканчиваются.
    Открыл - Закрой. Создал - Убей.
    Иначе MD.