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

Тема в разделе "WASM.BEGINNERS", создана пользователем elestrago, 25 мар 2009.

  1. elestrago

    elestrago New Member

    Публикаций:
    0
    Регистрация:
    25 янв 2009
    Сообщения:
    56
    саму фишку перетаскивания я уловил, вот только есть одна загвоздка если слишком быстро дернуть мышью то зацепка курсора за окно теряется... как решить эту проблему?

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

    Код (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

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    SetCapture?
    Но я бы просто на WM_NCHITTEST отвечал HTCAPTION.
     
  3. Blackbeam

    Blackbeam New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    960
    .elseif uMsg==WM_NCHITTEST
    invoke DefWindowProc,hWnd,uMsg,wParam,lParam
    .if eax==HTCLIENT
    mov eax,HTCAPTION
    .endif
    ret
     
  4. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    В обработчике WM_LBUTTONDOWN

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

    SC_DRAGMOVE = 0xF012
     
  5. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Вариантов куда больше, см. исходник HTSpy, но видно даже из скриншота.
     
  6. elestrago

    elestrago New Member

    Публикаций:
    0
    Регистрация:
    25 янв 2009
    Сообщения:
    56
    Спасибо всем большое :) разобрался!