Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.15.197.123] |
|
Сообщ.
#1
,
|
|
|
Запускаю приложение, там моя самодельная таблица типа Grid.
В ней есть скроллы, которые нормально работают, всё это в сабклассинге. Появилась следующая проблема. Когда моё приложение теряет фокус, например запустил калькулятор, а затем вернулся к таблице, то перестает работать сабклассинг, причем только обработчик прокрутки колесика мыши, обработчики кнопок скролла, и бегунок скролла работают без проблем. |
Сообщ.
#2
,
|
|
|
Цитата E.A. @ Запускаю приложение, там моя самодельная таблица типа Grid. В ней есть скроллы, которые нормально работают, всё это в сабклассинге. Если это самодельный контрол, тогда исследовать его работу можешь только ты сам. --- я попробовал то же самое с Edit-ом - паталогии не обнаружено. Всё работает по документации на WM_MOUSEWHEEL. Если фокус на главном окне, эти сообщения приходят к нему. Если фокус на дочернем Edit-е, сообщения получает Edit. Дальше как сделаешь. Если вызывается оригинальная процедура контрола (из процедуры сабклассинга), сообщение WM_MOUSEWHEEL пересылается родительскому окну. --- Для прокручивания скролла вовсе не обязательно делать это из сабклассинговой процедуры. Если такие сообщения получает родительское окно, в его обработчике вполне естественно решать такие вопросы. |
Сообщ.
#3
,
|
|
|
Цитата E.A. @ PS ещё такой вопросик в рамках этой же темы. на просторах интернета я нашел два способа определения в какую сторону крутится колесико мыши. 1. zDelta = GET_WHEEL_DELTA_WPARAM(wparam) 2. zDelta = (((POINTS*)&wparam) -> y) / WHEEL_DELTA я делал прямо по документации. Всё работало правильно. WM_MOUSEWHEEL Цитата ... wParam The high-order word indicates the distance the wheel is rotated, expressed in multiples or divisions of WHEEL_DELTA, which is 120. A positive value indicates that the wheel was rotated forward, away from the user; a negative value indicates that the wheel was rotated backward, toward the user. и в итоге у меня было как то так: short int zDelta = (int) HIWORD(wParam); // wheel rotation short int status = (int) LOWORD(wParam); int points = zDelta / WHEEL_DELTA; bool decLN=true; if(points < 0) { points = - points; decLN = false; } if(status == MK_CONTROL) { if(decLN){decPageNumber();} else {incPageNumber();} } else { for(int i=0;i<points;++i) { if(decLN){decLineNumber();} else {incLineNumber();} } } |