· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› как это делает WinAMP?

Посл.отвђт Сообщенiе


Дата: Янв 9, 2004 20:29:46

у меня есть форма, которая рисуется так (WM_PAINT):
invoke CreateCompatibleDC, hDC
mov hMemDC,eax
invoke SelectObject, hMemDC, hBmp
invoke BeginPaint, hWnd, ps
invoke StretchBlt,hDC, 0, 0, Width, Height, hMemDC, 0, 0, BmpWidth, BmpHeight, SRCCOPY
invoke EndPaint, hWnd, ps
invoke DeleteDC, hMemDC


WM_ERASEBKGND выглядит так:
or eax,1
ret


далее нужно, чтобы форма при перетаскивании отображалась, но, если в винде не стоит такая опция, то как известно рисуется рамка окна при перетаскивании и изменении размеров. тогда я добавил в WM_MOVING и в WM_SIZING строку:
invoke MoveWindow....

чтобы окно рисовалось. и все вроде бы рулез, рисуется как и надо, но если часть окна вышла за рамки экрана, то начинаются тормоза, т.е. оно (окно) перетаскивается скачками, у знаменитого WinAMP'а этой баги нет. так вот как это реализовать?
и как отрисовываются окна, когда ставишь опцию "отображать содержимое окон при перетаскивании"????

вы дочитали до сюда? прочтете может и про конвееры??


Дата: Янв 10, 2004 04:12:37 · Поправил: hGoblin

jekyll
Сделал так (Фасм, но, думаю, разберешься):
wmmoving:
	mov ebx,[lParam]
	virtual at ebx
	moverect RECT
	end virtual
	push [moverect.right]
	push [moverect.bottom]
	mov eax,[moverect.right]
	sub eax,[moverect.left]
	mov [moverect.right],eax
	mov eax,[moverect.bottom]
	sub eax,[moverect.top]
	mov [moverect.bottom],eax
	invoke MoveWindow,[hWin],[moverect.left],[moverect.top],[moverect.right],[mov erect.bottom],TRUE
	pop [moverect.bottom]
	pop [moverect.right]
	or eax,1
	jmp WndProc_finish

Все работает.
[Сорри, был злой.Отмодерировал]


Дата: Янв 14, 2004 13:53:14

так у меня тоже самое, но если окно попадает за границу экрана, то перетаскивание подтормаживает, ладно попробую Cut&Paste, может поможет


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.150