саму фишку перетаскивания я уловил, вот только есть одна загвоздка если слишком быстро дернуть мышью то зацепка курсора за окно теряется... как решить эту проблему? вот кусок кода демострирующий как происходит перемещение Код (Text): .elseif uMsg == WM_LBUTTONDOWN Invoke GetCursorPos,offset pd .elseif uMsg == WM_MOUSEMOVE && wParam == MK_LBUTTON Invoke GetCursorPos,offset p Invoke GetWindowRect,hWin,offset r mov eax,pd.x ; перекидываю в еах координату х курсора в момент нажатия кнопки mov edx,p.x ; сохраняю в едх новую координату х позиции курсора sub p.x,eax ; вычитаю из новой координаты старую и получаю разницу mov pd.x,edx ; сохраняю новую координату в старую mov eax,pd.y ; --- mov edx,p.y ; ----- sub p.y,eax ; ------ аналогично только с Y mov pd.y,edx ;----- mov eax,p.x ; add r.left,eax ; ---------- сдесь из полученой разницы получаю в какие координаты перемещать окно mov eax,p.y ; add r.top,eax ; Invoke SetWindowPos,hWin, HWND_TOP ,r.left, r.top , 700, 400, SWP_NOSIZE or SWP_NOZORDER .endif
.elseif uMsg==WM_NCHITTEST invoke DefWindowProc,hWnd,uMsg,wParam,lParam .if eax==HTCLIENT mov eax,HTCAPTION .endif ret
В обработчике WM_LBUTTONDOWN ReleaseCapture(); SendMessage(Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0); SC_DRAGMOVE = 0xF012