"Липкое окно"

Тема в разделе "WASM.WIN32", создана пользователем ActioN, 6 июн 2005.

  1. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    Как сделать, чтобы окно при перемещении к границе екрана на небольшое расстояние как бы прилипало к ней, вобщем, как в винампе, напимер.



    Кусок кода:

    LOCAL rect:RECT

    .IF uMsg == WM_MOVE

    invoke GetWindowRect, hWnd, ADDR rect

    mov eax,rect.top

    mov r_top,eax

    mov eax,rect.left

    mov r_left,eax



    .IF r_left < 25

    invoke SetWindowPos,hWnd,0,0,r_top,0,0,SWP_NOSIZE

    .ENDIF

    Но при перемещении наблюдается неприятный эффект мигания, как от этого избавиться, что добавить?
     
  2. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Обрабатывай WM_MOVING, в lParam'е готовый рект окна передается. Ничего моргать не будет. На примере левой границы экрана


    Код (Text):
    1.     .elseif eax==WM_MOVING
    2.         mov edx, lParam
    3.         assume edx: ptr RECT
    4.             mov eax,[edx].left
    5.             mov ecx,[edx].right
    6.             sub ecx,eax
    7.             test eax,eax
    8.             jns @F
    9.             neg eax
    10.             @@:
    11.             .if eax<100
    12.                 mov [edx].left,0
    13.                 mov [edx].right,ecx
    14.             .endif
    15.         assume edx:nothing
    16.         mov eax,TRUE
    17.         ret




    Попробуй отлепи окно от края экрана :)))
     
  3. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    cresta, что-то у меня ничего не работает, окно совсем не реагирует.
     
  4. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    mov eax,TRUE

    ret



    должны обязательно следовать за этим кодом. Не забыл про них?
     
  5. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    Понял, нашел в чем дело. А как же его отлепить?:))
     
  6. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Дёргай вправо, только резко!


    Код (Text):
    1. .data
    2.     rct    RECT<0,0,0,0>
    3. .code
    4. ;.
    5. ;.
    6.     .elseif eax==WM_MOVING
    7.         mov edx, lParam
    8.         assume edx: ptr RECT
    9.         mov eax,[edx].left
    10.         cmp eax,0
    11.         jle @F
    12.         .if eax<rct.left
    13.             .if rct.left <100
    14.                 mov ecx,[edx].right
    15.                 sub ecx,eax
    16.                 mov [edx].left,0
    17.                 mov [edx].right,ecx
    18.             .endif
    19.         .endif
    20.         jmp store
    21.         @@:
    22.         mov ecx,[edx].right
    23.         sub ecx,eax
    24.         mov [edx].left,0
    25.         mov [edx].right,ecx
    26.    store:
    27.         m2m rct.left,[edx].left
    28.         m2m rct.top,[edx].top
    29.         m2m rct.right,[edx].right
    30.         m2m rct.bottom,[edx].bottom
    31.         assume edx:nothing
    32.         mov eax,TRUE
    33.         ret
     
  7. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    ActioN

    Если немного поискать по форуму то в одном из

    топиков можно найти готовый пример, постил его

    Four-F
     
  8. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    cresta,
    :))

    Спасибо БОЛЬШОЕ
     
  9. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    Asterix, при большом количестве тем поиск затрудняется
     
  10. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
  11. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia