Уважаемый олл, вопрос в следующем
Есть CListCtrl, в нем по умолчанию вертикальный скролл.
Для реализуемой задачи необходимо управлять им самому — т.е. назначать мин/макс колво элементов, двигать бегунок.
Как получить к нему доступ? Или необходимо создавать свой класс ListCtrlа, в котором и издеваться с ним руками?
Спасибо
Stamp wrote: > > Уважаемый олл, вопрос в следующем > Есть CListCtrl, в нем по умолчанию вертикальный скролл. > Для реализуемой задачи необходимо управлять им самому — т.е. назначать мин/макс колво элементов, двигать бегунок. > Как получить к нему доступ? Или необходимо создавать свой класс ListCtrlа, в котором и издеваться с ним руками? > Спасибо
Доступ-то к нему получить несложно. listctrl — это окно, а поэтому, как
обычно, SetScrollInfo.
Но вот согласится ли лн с этим вмешательством — сильно сомневаюсь.
Представь себе, что ты сам его оконную функцию написал. Измеряешь
размеры элементов, сравниваешь с размерами окна, вызываешь SetScrollInfo
когда надо — азы, в общем. А теперь вдруг кто-то со стороны начинает
делать то же самое. Можно представить, что будет.
Попробуй, может, и получится. Метод следующий
Сабклассишь листконтрол.В перехватчике как минимум надо обрабатывать
WM_SIZE, все сообщения, связанные с добавлением и удалением элементов,
WM_V(H)SCROLL. Может, что-то еще... Т.е. тебе надо фактически полностью
заменить его работу со скроллбаром. А поэтому, каждый раз, когда он
что-то пытается с ним сделать, надо это действие перехватывать и
заменять на свое...
Вопрос — а зачем именно так нужно? Напиши подробнее о задаче, может,
есть более простое решение.
--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.7 "Bedlam"
With best regards
Pavel Dvorkin
Re[2]: CListCtrl - доступ к ScrollBar?
От:
Аноним
Дата:
29.06.04 10:29
Оценка:
PD>Вопрос — а зачем именно так нужно? Напиши подробнее о задаче, может, PD>есть более простое решение.
PD>-- PD>With best regards, PD> Pavel Dvorkin
Пишу сонтрол для работы с самодельным датасетом. Почему самодельным — потому что используется специфическая БД.
Что надо от контрола?
1. Если курсор датасета на первой записи — ползунок вверху, на последней — внизу
2. иначе — маааленький такой ползуночек посередине
3. при нажатии ниже ползунка — pagedown, выше — pageup
4. на стрелки — на одну запись вверх
Данные хранятся только В ВИДИМОЙ области грида.
ПОнятно написал?
Unknown wrote: > > PD>Вопрос — а зачем именно так нужно? Напиши подробнее о задаче, может, > PD>есть более простое решение. > > PD>-- > PD>With best regards, > PD> Pavel Dvorkin > > Пишу сонтрол для работы с самодельным датасетом. Почему самодельным — потому что используется специфическая БД. > Что надо от контрола? > 1. Если курсор датасета на первой записи — ползунок вверху, на последней — внизу > 2. иначе — маааленький такой ползуночек посередине > 3. при нажатии ниже ползунка — pagedown, выше — pageup > 4. на стрелки — на одну запись вверх > > Данные хранятся только В ВИДИМОЙ области грида. > ПОнятно написал?
Вполне. Я тут не большой специалист , но не исключено, что тебе подойдет
virtual listcontrol.
Stamp wrote: > > PD>Доступ-то к нему получить несложно. listctrl — это окно, а поэтому, как > PD>обычно, SetScrollInfo. > PD>Попробуй, может, и получится. > > Не получается... После SetScrollInfo делаю GetScrollInfo — возвращает то же, что было и до того...
Ничего удивительного. Я же говорил, конфликты возможны. Ты вызываешь
SetScrollInfo, оно влечет за собой, возможно, WM_VSCROLL, а обработчик
его вызывает опять SetScrollInfo и ставит как ему кажется нужным. Я это
к примеру, может, там и иначе...