Re: ScrollBars
От: creatio Украина  
Дата: 04.04.03 10:13
Оценка: 6 (1)
Народ, признаюсь, я не сразу этот метод нашёл, может кому поможет сэкономить горку времени...

Суть метода в следующем.

Скролл является конечно же окном, но не простым, а находящимся в НЕКЛИЕНТСКОЙ области!
Так вот, исходя из этого, можем рассчитать его координаты на поверхности нашего окна, как разницумежду координатами клиентской области и неклиентской.

Это фрагмент обработчика 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
ScrollBars
От: vinc Беларусь  
Дата: 30.03.03 11:28
Оценка:
Как получить указатель на ScrollBar, созданных выставлением флагов WS_HSCROLL и WS_VSCROLL при создании окна?

30.03.03 16:56: Перенесено модератором из 'C/C++' — ПК
Re: ScrollBars
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 30.03.03 21:30
Оценка:
Здравствуйте, vinc, Вы писали:

V>Как получить указатель на ScrollBar, созданных выставлением флагов WS_HSCROLL и WS_VSCROLL при создании окна?


Судя по всему, никак в указанном вами случае. Может, ошибаюсь (был бы рад этому )...
Re[2]: ScrollBars
От: VertexDev Россия  
Дата: 03.04.03 19:47
Оценка:
Здравствуйте, 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 >>
Re: ScrollBars
От: c-smile Канада http://terrainformatica.com
Дата: 03.04.03 20:38
Оценка:
Здравствуйте, vinc, Вы писали:

V>Как получить указатель на ScrollBar, созданных выставлением флагов WS_HSCROLL и WS_VSCROLL при создании окна?


Никак. Они не являются самостоятельными окнами.
Re[2]: ScrollBars
От: Кирпа В.А. Украина  
Дата: 04.04.03 08:48
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, vinc, Вы писали:


V>>Как получить указатель на ScrollBar, созданных выставлением флагов WS_HSCROLL и WS_VSCROLL при создании окна?


CS>Никак. Они не являются самостоятельными окнами.


CS>

Как это никак?
А
CWnd::GetScrollBarCtrl()
!0xDEAD
Re[3]: ScrollBars
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 04.04.03 09:00
Оценка:
Здравствуйте, 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.

Re[3]: ScrollBars
От: Patalog Россия  
Дата: 04.04.03 09:13
Оценка:
Здравствуйте, Кирпа В.А., Вы писали:

[]

КВА>Как это никак?

КВА>А
КВА>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.
...

Почетный кавалер ордена Совка.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.