Как получить указатель на ScrollBar, созданных выставлением флагов WS_HSCROLL и WS_VSCROLL при создании окна?
30.03.03 16:56: Перенесено модератором из 'C/C++' — ПК
Здравствуйте, vinc, Вы писали:
V>Как получить указатель на ScrollBar, созданных выставлением флагов WS_HSCROLL и WS_VSCROLL при создании окна?
Судя по всему, никак в указанном вами случае. Может, ошибаюсь (был бы рад этому

)...
Здравствуйте, Flamer, Вы писали:
F>Здравствуйте, vinc, Вы писали:
V>>Как получить указатель на ScrollBar, созданных выставлением флагов WS_HSCROLL и WS_VSCROLL при создании окна?
F>Судя по всему, никак в указанном вами случае. Может, ошибаюсь (был бы рад этому
)...
WM_VSCROLL
nScrollCode = (int) LOWORD(wParam); // scroll bar value
nPos = (short int) HIWORD(wParam); // scroll box position
hwndScrollBar = (HWND) lParam; // handle of scroll bar
Мажет это поможет?...

... << RSDN@Home 1.0 beta 6a >>
Здравствуйте, VertexDev, Вы писали:
[]
VD>WM_VSCROLL
VD>nScrollCode = (int) LOWORD(wParam); // scroll bar value
VD>nPos = (short int) HIWORD(wParam); // scroll box position
VD>hwndScrollBar = (HWND) lParam; // handle of scroll bar
VD>Мажет это поможет?...
А вот это вас не смущает:
hwndScrollBar
Value of lParam. Identifies the control if WM_VSCROLL is sent by a scroll bar control. If WM_VSCROLL is sent by a window's standard scroll bar, hwndScrollBar is not used.
Здравствуйте, Кирпа В.А., Вы писали:
[]
КВА>Как это никак?
КВА>А
КВА>CWnd::GetScrollBarCtrl()
CWnd::GetScrollBarCtrl
...
Remarks
This member function does not operate on scroll bars created when the WS_HSCROLL or WS_VSCROLL bits are set during the creation of a window.
...
Народ, признаюсь, я не сразу этот метод нашёл, может кому поможет сэкономить горку времени...
Суть метода в следующем.
Скролл является конечно же окном, но не простым, а находящимся в НЕКЛИЕНТСКОЙ области!
Так вот, исходя из этого, можем рассчитать его координаты на поверхности нашего окна, как разницумежду координатами клиентской области и неклиентской.
Это фрагмент обработчика WM_LBUTTONDOWN, написанного под MFC, но он тривиально переделывается для Win32API
CRect crc;
ClientToScreen(&crc);
CRect hscrl_rc, vscrl_rc;
hscrl_rc.SetRect(crc.left, crc.bottom+1, crc.right+1, rc.bottom-1);
vscrl_rc.SetRect(crc.right, crc.top, rc.right-1, crc.bottom-1);
if(hscrl_rc.PtInRect(point)) //Горизонтальный скрол
SendMessage(WM_NCLBUTTONDOWN, HTHSCROLL, MAKELPARAM(point.x, point.y));
else if(vscrl_rc.PtInRect(point)) //Вертикальный скрол
SendMessage(WM_NCLBUTTONDOWN, HTVSCROLL, MAKELPARAM(point.x, point.y));
Why do you call Visual Studio 'your bunny'?...
(c) one american colleague