Скроллируемая область

Тема в разделе "WASM.WIN32", создана пользователем Novi4ek, 12 мар 2008.

  1. Novi4ek

    Novi4ek New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    317
    Как создать в окне отдельные скроллируемые области, внутри которых располагаются и скроллируются бегунками этой области свои собственные контролы?
     
  2. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Создаешь окно со стилями WS_HSCROLL | WS_VSCROLL
    Обрабатываешь сообщения WM_HSCROLL & WM_VSCROLL c использованием SetScrollInfo или чего-нибудь подобного. Как приходит сообщение - MoveWindow/SetWindowPos/DeferWindowPos/ еще что-нибудь. DeferWindowPos afaik предпочтительней
    Используешь ScrollWindowEx с соответствующими флагами, конкретно - SW_SCROLLCHILDREN|SW_INVALIDATE.
    Короче, тоже самой что и скроллинг битмапа, только вместо BitBlt - DeferWindowPos + ScrollWindowEx (+SW_SCROLLCHILDREN)
     
  3. Novi4ek

    Novi4ek New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    317
    Спасибо попробую
     
  4. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Novi4ek
    Оказалось, даже самому и не надо ничего двигать. ScrollWindowEx посылает WM_MOVE дочерним окнам.
    В аттаче то что вышло у меня. Все вроде ничего, но вот InvalidateRect, [hwnd], 0, 1 в двух местах мне оч. не нравятся. Но без них никак что-то. ХЗ, может стоит перед этим брать GetUpdateRect и передавать в InlvalidateRect указатель на полученный прямоугольник...
    Может еще кто что подскажет...
     
  5. Novi4ek

    Novi4ek New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    317
    >>Оказалось, даже самому и не надо ничего двигать. ScrollWindowEx посылает WM_MOVE дочерним окнам.

    Вот я думал что по идее должно быть что-то в этом роде.

    >>В аттаче то что вышло у меня. Все вроде ничего, но вот InvalidateRect, [hwnd], 0, 1 в двух местах мне оч. не нравятся. Но без них никак что-то. ХЗ, может стоит перед этим брать GetUpdateRect и передавать в InlvalidateRect указатель на полученный прямоугольник...

    У меня твой пример не работает - при разворачивании окошка в нем застывает беграунд, никакого собственого контента не видно.
    Да и жалко что пример на ассемблере.
     
  6. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Ну, ХЗ. Посмотри в отлачдике что не проходит.
    Мдя.