Помогите пожалуйста. Нужно чтобы ползунок перемещался сразу точно в то место где был клик. У меня ерунда какая то выходит( Код (Text): .if uMsg==WM_LBUTTONDOWN mov eax,lParam and eax,0FFFFh invoke SendDlgItemMessage,hWnd,IDC_TBR1,TBM_SETPOS,TRUE,eax перемещается куда угодно,только не туда куда надо.
WM_LBUTTONDOWN возвращает координаты в окне, а TBM_SETPOS требует значение впределах установленных мин/макс для трекбара. то есть, если так хочется сделать то что хочется - придется заняться неинтересными вычислениями (может, они и несложны - я не пробовал
В eax-е у тебя координата курсора куда ты кликнул, ее надо преобразовать в положение для трэкбара. Скажем TrackBar у тебя имеет диапазон 0 - 1000, а ширина самого TrackBar-а 100 пикселей. Тогда еах нужно умножать приблизительно на 10. И не забывай учитывать "пустое место" слева и справа от ползунка при пересчете координат в позицию.
Для этого есть GetWindowRect например. Возвращает координаты BoundingBox-а контрола. Только вроде как экранные координаты... // а как ты его ресайзиш? в том месте где ресайзиш его размеры и проскакивать должны
rmn подглядел МСДН... The dimensions are given in screen coordinates that are relative to the upper-left corner of the screen.
2Bohdan200 я имел в виду кол-во пикселей. получается это будет еще зависеть от разрешения экрана? или нет.координаты одинаковы у всех контролов. что то я запутался.
Разобрался) Код (Text): .elseif uMsg==WM_HSCROLL mov eax,wParam .elseif ax==TB_PAGEUP mov eax,lParam .if eax==hTBR1 invoke GetCursorPos,addr curPos invoke SendMessage,hTBR1,TBM_GETCHANNELRECT,0,addr RctTBR mov eax,RctTBR.left sub RctTBR.right,eax sub curPos.x,10 fsave content fild curPos.x fild sto fmul fild RctTBR.right fdiv fistp curPos.x frstor content invoke SendDlgItemMessage,hWnd,IDC_TBR1,TBM_SETPOS,TRUE,curPos.x