Как сделать чтобы трэкбар перемещался в то место куда кликнули мышью?

Тема в разделе "WASM.BEGINNERS", создана пользователем max2m, 28 дек 2006.

  1. max2m

    max2m New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    7
    Помогите пожалуйста.
    Нужно чтобы ползунок перемещался сразу точно в то место где был клик.
    У меня ерунда какая то выходит(
    Код (Text):
    1. .if uMsg==WM_LBUTTONDOWN
    2. mov eax,lParam
    3. and eax,0FFFFh     
    4. invoke SendDlgItemMessage,hWnd,IDC_TBR1,TBM_SETPOS,TRUE,eax
    перемещается куда угодно,только не туда куда надо.
     
  2. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    WM_LBUTTONDOWN возвращает координаты в окне, а TBM_SETPOS требует значение впределах установленных мин/макс для трекбара. то есть, если так хочется сделать то что хочется - придется заняться неинтересными вычислениями (может, они и несложны - я не пробовал ;)
     
  3. Bohdan200

    Bohdan200 New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2005
    Сообщения:
    134
    Адрес:
    Lviv
    В eax-е у тебя координата курсора куда ты кликнул, ее надо преобразовать в положение для трэкбара. Скажем TrackBar у тебя имеет диапазон 0 - 1000, а ширина самого TrackBar-а 100 пикселей. Тогда еах нужно умножать приблизительно на 10. И не забывай учитывать "пустое место" слева и справа от ползунка при пересчете координат в позицию.
     
  4. Bohdan200

    Bohdan200 New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2005
    Сообщения:
    134
    Адрес:
    Lviv
    2 shoo
    Апередил :)
     
  5. max2m

    max2m New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    7
    а как тогда узнать ширину трэкбара?
    он у меня ресайзится,при изменении размеров окна.
     
  6. Bohdan200

    Bohdan200 New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2005
    Сообщения:
    134
    Адрес:
    Lviv
    Для этого есть GetWindowRect например. Возвращает координаты BoundingBox-а контрола. Только вроде как экранные координаты...

    // а как ты его ресайзиш? в том месте где ресайзиш его размеры и проскакивать должны :)
     
  7. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    [deleted]
    ага, точно. Ошибся... :)
     
  8. Bohdan200

    Bohdan200 New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2005
    Сообщения:
    134
    Адрес:
    Lviv
    rmn
    подглядел МСДН...

    The dimensions are given in screen coordinates that are relative to the upper-left corner of the screen.
     
  9. max2m

    max2m New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    7
    2Bohdan200
    я имел в виду кол-во пикселей.
    получается это будет еще зависеть от разрешения экрана?
    или нет.координаты одинаковы у всех контролов.
    что то я запутался.
     
  10. max2m

    max2m New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    7
    Разобрался)
    Код (Text):
    1. .elseif uMsg==WM_HSCROLL
    2. mov eax,wParam
    3. .elseif ax==TB_PAGEUP
    4. mov eax,lParam
    5. .if eax==hTBR1
    6. invoke GetCursorPos,addr curPos
    7. invoke SendMessage,hTBR1,TBM_GETCHANNELRECT,0,addr RctTBR
    8. mov eax,RctTBR.left
    9. sub RctTBR.right,eax
    10. sub curPos.x,10
    11. fsave content
    12. fild curPos.x
    13. fild sto
    14. fmul
    15. fild RctTBR.right
    16. fdiv
    17. fistp curPos.x
    18. frstor  content
    19. invoke SendDlgItemMessage,hWnd,IDC_TBR1,TBM_SETPOS,TRUE,curPos.x