Splitter реализация

Тема в разделе "WASM.BEGINNERS", создана пользователем OSMan, 6 янв 2008.

  1. OSMan

    OSMan New Member

    Публикаций:
    0
    Регистрация:
    18 авг 2007
    Сообщения:
    23
    Вот хочу создать сплиттер как в дельфи. C:\masm32\examples\EXAMPLE6\SPLITTER смотрел. C:\masm32\examples\EXAMPLE7\TREEDEMO тоже. Но чего то они мне не нравятся. В первой ссылке сплиттера нет, есть лишь промежуток между двумя контролами, мне это не понравилось, потому что при изменении размера окна происходят непонятные вещи. Во втором примере при хватании за сплиттер главное окно теряет фокус, тоже странно. Мне бы хотелось увидеть, как создавать сплиттер. Всем спасибо
     
  2. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Сплиттер - это контрольное окно (child window), которое является родителем для двух других панелей. Промежуток между панелями и есть линия сплиттера, так что это правильный подход. Если что-то не работает, то значит неверно имплементировано.
     
  3. OSMan

    OSMan New Member

    Публикаций:
    0
    Регистрация:
    18 авг 2007
    Сообщения:
    23
    А какой класс у окна? Статик наверное
     
  4. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    А... понимаю, ты думаешь, что это входит в состав системных элементов, как, "edit" или "listbox". Должен огорчить - Splitter-ы сделаны отдельно. MFC имеет свой код, а Borland Builder - свой. Я например делаю Splitter-ы сам.
     
  5. OSMan

    OSMan New Member

    Публикаций:
    0
    Регистрация:
    18 авг 2007
    Сообщения:
    23
    А будет правильно делать так: при большом кол-ве сплиттеров в одном окне, группировать контролы в статик меняя родителей контролов на этот самый статик? Тут получается типа статик играет роль TPanel из дельфи. Потом сабклассировать статик и обрабатывать мышиные события. Расстояние между контролами и есть сплиттер (видимая часть статика). Можно ли так?
     
  6. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Сабклассинг должен по идее работать. Никогда не пробовал.
    Вот в этой куче ссылок, должно быть про реализацию сплиттера:

    http://catch22.net/tuts/
     
  7. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
  8. OSMan

    OSMan New Member

    Публикаций:
    0
    Регистрация:
    18 авг 2007
    Сообщения:
    23
    Использую MoveWindow (последний параметр - TRUE). При этом окно некрасиво мигает. Как избавиться от этого? Хочется чтоб все было гладко при хватании за сплиттер. Координаты правильные, а вот мигание все портит. Что делать?
     
  9. Ra_

    Ra_ New Member

    Публикаций:
    0
    Регистрация:
    4 мар 2007
    Сообщения:
    289
    del
     
  10. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Окно под сплиттером (родитель двух панелей) не должно рисовать свой фон.
     
  11. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    OSMan
    У всех родительских окон должен стоять стиль WS_CLIPCHILDREN.

    [add]
    Вот, раскопал у себя примерчик. Если кому что не понравится - сообщите, а то это у меня входит в templates.
    Здесь не добавлена возможность при изменении размеров окна перемещать сплиттер и ограничение на минимальный размер окна; это не должно вызвать затруднений. Так же принимается, что дочерние окна закрывают всю клиентскую область main окна.