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


TN029. Окна разделителей

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

Стиль разделителя

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

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

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

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

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

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

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

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

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

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

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

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

Примеры разделителя

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

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

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

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

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

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

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

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

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

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

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

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

Например, в окне столбца 1 x2 строки, можно указать WS_VSCROLL создание CSplitterWnd. Windows создает специальный элемент управления "полоса прокрутки", совместно используемый в 2 областями.

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

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

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

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

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

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

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

Фактический и идеальных размеров

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

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

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

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

  • 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 была связана недопустимо. Для приложений, использующих CView, но не CSplitterWnd, реализация CSplitterWnd не будет связана с приложением.

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

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

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

См. также

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

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

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