Перетаскивание окна без заголовка!

Discussion in 'WASM.BEGINNERS' started by elestrago, Mar 25, 2009.

  1. elestrago

    elestrago New Member

    Blog Posts:
    0
    Joined:
    Jan 25, 2009
    Messages:
    56
    саму фишку перетаскивания я уловил, вот только есть одна загвоздка если слишком быстро дернуть мышью то зацепка курсора за окно теряется... как решить эту проблему?

    вот кусок кода демострирующий как происходит перемещение

    Code (Text):
    1. .elseif uMsg == WM_LBUTTONDOWN
    2.     Invoke GetCursorPos,offset pd
    3. .elseif uMsg == WM_MOUSEMOVE && wParam == MK_LBUTTON
    4.         Invoke GetCursorPos,offset p
    5.         Invoke GetWindowRect,hWin,offset r
    6.         mov eax,pd.x ; перекидываю в еах координату х курсора в момент нажатия кнопки
    7.         mov edx,p.x ; сохраняю в едх новую координату х позиции курсора
    8.         sub p.x,eax ; вычитаю из новой координаты старую и получаю разницу
    9.         mov pd.x,edx ; сохраняю новую координату в старую
    10.         mov eax,pd.y ;  ---
    11.         mov edx,p.y ; -----
    12.         sub p.y,eax ; ------ аналогично только с Y
    13.         mov pd.y,edx ;-----
    14.         mov eax,p.x ;
    15.         add r.left,eax ; ---------- сдесь из полученой разницы получаю в какие координаты перемещать окно
    16.         mov eax,p.y ;
    17.         add r.top,eax ;
    18.         Invoke SetWindowPos,hWin, HWND_TOP ,r.left, r.top , 700, 400, SWP_NOSIZE or SWP_NOZORDER
    19.     .endif
     
  2. iZzz32

    iZzz32 Sergey Sfeli

    Blog Posts:
    0
    Joined:
    Sep 3, 2006
    Messages:
    355
    SetCapture?
    Но я бы просто на WM_NCHITTEST отвечал HTCAPTION.
     
  3. Blackbeam

    Blackbeam New Member

    Blog Posts:
    0
    Joined:
    Dec 28, 2008
    Messages:
    960
    .elseif uMsg==WM_NCHITTEST
    invoke DefWindowProc,hWnd,uMsg,wParam,lParam
    .if eax==HTCLIENT
    mov eax,HTCAPTION
    .endif
    ret
     
  4. Partner

    Partner Павел

    Blog Posts:
    0
    Joined:
    Feb 28, 2008
    Messages:
    917
    Location:
    Los Angeles
    В обработчике WM_LBUTTONDOWN

    ReleaseCapture();
    SendMessage(Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0);

    SC_DRAGMOVE = 0xF012
     
  5. kero

    kero Модератор SOURCES & 2LZ Staff Member

    Blog Posts:
    0
    Joined:
    Apr 4, 2006
    Messages:
    1,074
    Location:
    Москва
    Вариантов куда больше, см. исходник HTSpy, но видно даже из скриншота.
     
  6. elestrago

    elestrago New Member

    Blog Posts:
    0
    Joined:
    Jan 25, 2009
    Messages:
    56
    Спасибо всем большое :) разобрался!