Я делаю процедуру, которая перемещает белый элип в центр окна. Я делаю это, используя процедуры BeginPaint, EndPaint, Ellipse. Когда нет цикла, он работает нормально, показывая elipse внизу, но когда я использую цикл, он перемещает elipse, где мне нужно, и чем перестает отвечать (я полагаю, процедура не возвращает управление). Как исправить эту проблему? Я даже начал делать копии значений registegrs.Приложение перестает отвечать после длительной обработки WM_PAINT
WM_PAINT:
invoke BeginPaint, hWnd, addr ps ;
mov hdc, eax ;
invoke GetClientRect, hWnd, addr rect; invoke DrawInitialElipse
invoke DrawInitialElipse
Процедура:
DrawInitialElipse proc
LOCAL tempEAL:BYTE
LOCAL tempEAX:DWORD
LOCAL tempEDX:DWORD
LOCAL tempECX:DWORD
mov tempEAL, al
mov tempEAX, eax
mov tempEDX, edx
mov tempECX, ecx
finit
fld initialColorStep
fld currentColorDouble
fadd
fst currentColorDouble
fistp dword ptr currentColorInt
mov al, byte ptr [currentColorInt]
mov tempColor, al
mov esi, currentInitialCirclePositionY
.WHILE (esi != ydiv2)
.if stepNumber1==0
mov edi, startY
mov currentInitialCirclePositionY, edi
.else
dec currentInitialCirclePositionY
.endif
inc stepNumber1
mov edi, currentInitialCirclePositionY
sub edi,cnst_10
mov topLeftY, edi
mov edi, startX
sub edi, cnst_5
mov topLeftX, edi
mov edi, currentInitialCirclePositionY
add edi, cnst_10
mov bottomRightY, edi
mov edi, startX
add edi, cnst_5
mov bottomRightX, edi
invoke CreateBrush, 240,240,240
mov initialBrush, edi
invoke SelectObject, hdc, initialBrush
invoke Ellipse, hdc, topLeftX,topLeftY,bottomRightX,bottomRightY; //рисуем другим перо
invoke Sleep, 10
.ENDW
mov al, tempEAL
mov eax,tempEAX
mov edx,tempEDX
mov ecx,tempECX
ret
DrawInitialElipse endp
Похоже, вы не отпуская кисть с 'DeleteObject' –
К сожалению, это не помогло – Henry1996
Узнать, как это сделать это сначала на C++. Затем код в asm. Хотя этот последний шаг кажется бессмысленным. –