Ниже код обработки событий....в программе есть меню с двумя пунктами(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
Код рисования должен быть помещён в обработчик WM_PAINT,а не WM_COMMAND, т.к. получается что он вызывается только при нажатии на что-нибудь. Кажется так должно быть: Код (Text): .elseif ax==IDM_START invoke CreatePen,0,1,000000h mov blackpen,eax invoke SelectObject,hdc,blackpen mov paintflag,1 Код (Text): .ELSEIF uMsg==WM_PAINT .if paintflag==1 invoke InvalidateRect,hWnd,addr rect,TRUE invoke BeginPaint,hWnd,addr ps mov hdc,eax invoke Ellipse,hdc,50,50,100,100 invoke EndPaint,hWnd,addr ps mov hdc,eax .endif
Также утечка ресурсов: то что создано через 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
100% Помню как сам на этом попалился А работал с видео, вот там то быстро они заканчиваются. Открыл - Закрой. Создал - Убей. Иначе MD.