Прокрутка в окне под курсором.
От: Crackjack Россия  
Дата: 05.08.05 07:30
Оценка:
Необходимо прокручивать область находящуюся под курсором. Стоит ловушка WH_MOUSE_LL. Сначала делал вот так:

case WM_MOUSEWHEEL:
{            
MSLLHOOKSTRUCT* mhs = (MSLLHOOKSTRUCT*)lParam;
POINT point;            
if(GetCursorPos(&point))
{ 
HWND hwnd =    WindowFromPoint(point);
if(hwnd)
{
WPARAM wprm = MAKEWPARAM(0, HIWORD(mhs->mouseData));
LPARAM lprm = MAKELPARAM(point.x, point.y);
SendMessage(hwnd, WM_MOUSEWHEEL, wprm, lprm);
}

}
и т.д.

Не устроило, т.к. не всегда почему то работает, то прокручивается, то нет.
Потом поменял SendMessage на PostMessage, эфект тот-же: не всегда работает.
Теперь пробую вот так:

case WM_MOUSEWHEEL:
{
MSLLHOOKSTRUCT* mhs = (MSLLHOOKSTRUCT*)lParam;
POINT point;        
if(GetCursorPos(&point))
{ 
HWND hwnd = WindowFromPoint(point);
if(hwnd)
{
WPARAM wprm = MAKEWPARAM(0, HIWORD(mhs->mouseData));
LPARAM lprm = MAKELPARAM(point.x, point.y);
int distance = HIWORD(wParam);//Что это за параметр? Как его перевести в экранные координаты?
ScrollWindowEx(hwnd, 0, 20, NULL, NULL,NULL, NULL, SW_ERASE);
SendMessage(hwnd, WM_PAINT, 0, 0);
}
}

Не работает как надо вообще. Изображение окна смещается, причём любого!(Даже у которого scrollbar-ов нет), а недействительная область заполняется одним и тем же изображением. Как можно организовать прокрутку самому?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.