Поделиться через


TN029: окна Splitter

Эта заметка описывает MFC Класс CSplitterWnd, который предоставляет разбиения окна и управляет размер других окон панели.

Стили Splitter

CSplitterWnd поддерживает 2 различных стиля разделение окна.

В случае статических splitters «,» окно-разделитель создает панели при его создания.Порядок и число панелей никогда не изменяются.Полосы разделения используются для изменения размера различные области.Можно использовать этот стиль отображения другого класса представления в каждой панели.Графический редактор Visual C++ и файловый менеджер окон примеры программ, использующих этот стиль разделителя.Этот стиль окна разделитель не использует окна разделителя.

В динамических splitters «,» создаются и уничтожаются дополнительные панели по мере того, как пользователь разбивается и представления ООН-разбиений новые.Этот разделитель запускается с одним представлением, и предоставляет окна разделитель для пользователя, для которого требуется начать разделить.Окно-разделитель динамически создает новый объект представления, если представление разделено в одном направлении.Этот новый объект представления представляющий новую область.Если представление разделено в 2 направлениях с помощью интерфейса клавиатуры, окно-разделитель создает 3 новых объектов представления для 3 новых панелей.При разбиении активен, окна показаны окно-разделитель, как полоса разделения между областями.Окна разрушают дополнительные объекты представления, когда пользователь удаляет разбиение ", но первоначальное представление остается до тех пор, пока само окно разделитель не удалено.Microsoft Excel и Microsoft Word примеры приложений, использующих динамический стиль разделителя.

При создании любой тип окна разделителя, необходимо задать максимальное число строк и столбцов, разделителем.Статический разделитель создает панели, чтобы заполнить все строки и столбцы.Динамический разделитель создает только первая панели при CSplitterWnd будет создано.

Максимальное число областей, можно указать для статических строк splitters 16 16 столбцами.Рекомендуемые конфигурации:

  • 1 x 2 столбца: string обычно с разнородными панелями

  • 2 x 1, столбец строки: обычно с разнородными панелями

  • 2 x 2 строки столбца: обычно со схожими панелями

Максимальное число областей, которые можно задавать для динамических splitters 2, строки 2 столбцами.Рекомендуемые конфигурации:

  • 1 x 2 столбца: string для шестоватых данных

  • 2 x 1, столбец строки: для текстовой или других данных

  • 2 x 2 строки столбца: для сетки или таблицы ориентировал данных

Примеры Splitter

Многие из примеров программ MFC используют окна разделитель непосредственно или косвенно.Общие VIEWEX MFC использует образец иллюстрирует несколько статических splitters, включая способ задания разделитель в разделителя.

Можно также использовать ClassWizard для создания нового несколько класс окна фрейма дочернего элемента интерфейса MDI, содержащий окно-разделитель.Дополнительные сведения об окнах см. в разделе Несколько типов документов, представления и фрейма окна разделителем.

Терминология, используемая реализацией

Ниже приведен перечень терминов, относящихся к окнам разделителем.

  • CSplitterWnd:
    Окно, содержащее панель-разделить элементы управления и полосы прокрутки, которые разделены между всеми областями в строке или столбце.Определении строки и столбцы с нулевой-основанными числами (первая область строка = 0, а столбец = 0).

  • Область:
    Конкретного приложения окно, CSplitterWnd управляет.Панель обычно объект, производный от Класс CView, но может быть любым объектом CWnd, имеющий соответствующее идентификатор дочернего окна

    Использовать CWnd- производный объект, передайте RUNTIME_CLASS объекта функции CreateView так же, как и при использовании CView- производный класс.Класс должен использовать DECLARE_DYNCREATE и IMPLEMENT_DYNCREATE поскольку инфраструктура использует динамическое создание во время выполнения.Хотя многие код в CSplitterWnd, относящихся к классу CView, CObject::IsKindOf всегда используется прежде чем эти действия выполняются.

  • Вешку разбивки:
    Элемент управления, который размещается между строками и столбцами панелей.Он может использоваться для обработки изменения размеров строк или столбцов панелей.

  • Окно-разделитель:
    Элемент управления в динамическом CSplitterWnd, который можно использовать для создания новых строк или столбцов панелей.Он расположен в верхней части вертикальные полосы прокрутки или слева от горизонтальной полос прокрутки.

  • Пересечение разделителем.
    Пересечение вертикальной полосы разделения и горизонтальной полосы разделения.Можно перетащить его для обработки размер строки и столбца панелей одновременно.

Общие полосы прокрутки

Класс CSplitterWnd также поддерживает общие полосы прокрутки.Эти элементы управления " полоса прокрутки " дочерние элементы CSplitterWnd и используются совместно с другими областями в разделителя.

Например, в строке " 1 x 2 столбцов, можно указать WS_VSCROLL создать CSplitterWnd.Окна создать нерегламентированное элемент управления " полоса прокрутки ", shared между панелями 2.

[      ][      ][^]
[pane00][pane01][|]
[      ][      ][v]

Когда пользователь перемещается полоса прокрутки, WM_VSCROLL сообщения отправляются на оба представления.При отправке представление устанавливает положение полосы прокрутки, общая полоса прокрутки будет установлена.

Обратите внимание, что наиболее полезных общих полосы прокрутки со схожими объектами представления.Если смешиваете представления разных типов в разделитель, то можно написать специальный код для координации их позиции прокрутки.Любое CView- производный класс, который использует API полосы прокрутки CWnd делегатов к общей полосе прокрутки если она существует.Реализация CScrollView примером класса CView, который поддерживает общие полосы прокрутки.Классы, которые наследуются от CView, классов, которые основаны на полосах прокрутки non-элемента управления или классы, которые используют стандартное реализации windows (например, CEditView) не будут работать с общей функцией полосы прокрутки CSplitterWnd.

Минимальные размеры

Минимальная высота строки для каждой строки и каждого столбца минимальная ширина столбца.Этот минимум гарантирует, что панель не слишком мала для отображения в полном логики.

Для статического окна разделитель, исходные минимальные высота и ширина столбцов 0 строк.Для динамического окна разделитель, исходные минимальные высота строк и ширина столбца задается параметром sizeMin функции CSplitterWnd::Create.

Можно изменить эти минимальные размеры с помощью функций CSplitterWnd::SetRowInfo и CSplitterWnd::SetColumnInfo.

Фактическое сравнение.В идеале размеры

Структура панелей зависит от окна разделитель размер кадра, который содержит их.Если пользователь изменяет размер, содержащий кадр, CSplitterWnd проходит и изменяет размер панели, чтобы они по размеру наилучшим образом.

Пользователь может вручную установить размеров высоты и ширины столбцов, строк или программа может задать оптимальный размер с помощью класса CSplitterWnd.Фактический размер может оказаться меньше или больше идеал.Если фактический размер окна обрабатывают недостаточно места для отображения оптимальный размер или если слишком много пустого пространства справа или нижней части окна разделителя.

Пользовательские элементы управления

Можно переопределить множество функций для обеспечения настраиванную расширения функциональности и настраиванный интерфейс.Можно переопределить этот первый набор для обеспечения альтернативной скульптуру для различных графических компонентов окна разделителя.

  • virtual void OnDrawSpltter(CDC* pDC, ESplitType nType, const CRect& rect);

  • virtual void OnInvertTracker(const CRect& rect);

Эта функция вызывается для создания совместно используемого элемента управления " полоса прокрутки ".Можно переопределить его, чтобы создать дополнительные элементы управления рядом с полосой прокрутки.

  • virtual BOOL CreateScrollBarCtrl(DWORD dwStyle, UINT nID);

Эти функции, реализующие логику динамического окна разделителя.Можно переопределить эти для обеспечения более предварительную логику разделителя.

  • virtual void DeleteView(int row, int col);

  • virtual BOOL SplitRow(int cyBefore);

  • virtual BOOL SplitColumn(int cxBefore);

  • virtual void DeleteRow(int rowDelete);

  • virtual void DeleteColumn(int colDelete);

Функциональность CView

Класс CView использует следующие высокоуровневые команды делегировать к CSplitterWnd реализацию.Поскольку эти команды в действительности, стандартная реализация CView не требуется, что все реализации CSplitterWnd была связана in.Для приложений, использующих CView, но не CSplitterWnd реализация CSplitterWnd не будет связана с приложением.

  • virtual BOOL CanActivateNext(BOOL bPrev = FALSE);
    Проверяет, является ли ID_NEXT_PANE или ID_PREV_PANE в данный момент возможным.

  • virtual void ActivateNext(BOOL bPrev = FALSE);
    Выполняет «команда следующей панели» или «предыдущей панели».

  • virtual BOOL DoKeyboardSplit();
    Выполняет команду разбиения клавиатуры, обычно «разделенное поле».

См. также

Другие ресурсы

Технические замечания по номеру

Технические замечания по категориям