В настоящей записке описывается класс MFC CSplitterWnd , который используется для предоставления окно расколов и для управления, изменения размера панели окон.
Примечание Пожалуйста не забудьте прочитать техническое примечание 20 относительно использования идентификаторов и действительный Идентификатор диапазоны.
Разделитель стилей
CSplitterWnd поддерживает две разные стили расщепления windows.
В «статический сплиттеры,» стекол создаются при создании окна разделителя, и никогда не изменяются порядок и количество панелей. Вертикальные разделительные линии используются для изменения размеров различные панели, и различные панели, как правило, классов различных представлений. Менеджер файлов Windows и графический редактор Visual C++ являются примерами программ, которые используют этот стиль разделителя. Разделитель поля не используются в этом стиле разделителя.
В «Динамический сплиттеры,» дополнительные области создаются и уничтожаются как пользователя разделений и расколов ООН новые представления. Это сплиттер начинается с простой и разделитель полей предоставляются инициировать разделение. Если мнение разделено в одном направлении, объект дополнительного представления динамически создается для представления новой панели. Если мнение разделено в двух направлениях (возможно с интерфейсом клавиатуры), три новые представления создаются для представления трех новых областей. Когда активен раскол, поле разделителя рисуется как на разделитель между панелями. Дополнительные представления, которое объекты удаляются, когда пользователь удаляет раскола, но оригинальный вид (строки 0, столбец 0) остается до тех пор, пока само окно разделителя уничтожается. Microsoft Excel или Microsoft Word являются примерами динамических Разделитель стилей.
При создании любой вид окна разделителя, необходимо указать максимальное количество строк и столбцов, которые будут управлять разделителя. Для статического разделителя панелей должны создаваться для заполнения всех строк и столбцов. Для динамической разделителя Первая область создается автоматически при создании CSplitterWnd.
Максимальное количество панелей, которые можно задать для статических сплиттеры — 16 строк по 16 столбцов. Рекомендуемые конфигурации:
Максимальное количество панелей, которые можно задать для динамических сплиттеры-2 строки по 2 колонки. Рекомендуемые конфигурации:
Примеры разделителя
Многие из примеров программ MFC использовать разделитель windows прямо или косвенно. Шаг 4 учебника MFC КАРАКУЛИ добавляет окно динамической разделитель для разделения CScribView на несколько панелей. Как показано в этом действии, добавить новое окно разделитель кадра очень легко с функцией добавления класса ClassWizard. Этот пример представляет собой окно динамической разделителя по умолчанию.
В примере MFC Генеральной VIEWEX показаны несколько способов применения статических сплиттеры, включая как разместить разделитель в сплиттер.
ClassWizard создаст новый интерфейс (MDI) ребенок кадр класс окна MDI который содержит окно-разделитель. Обратитесь к Windows разделителя в Руководстве Visual C++ программист.
Терминология, используемая реализация
Терминология частей CSplitterWnd и связанных объектов.
CSplitterWnd:
Это обеспечивает разделение панели управления окно и полосы прокрутки, которые являются общими для всех областей на строку или столбец. Строки и столбцы задаются с нуля номера [, первая панель является строка = 0 и столбец = 0]
Панель:
Окно приложения, которое находится в ведении CSplitterW&nd. Панель – обычно CView-производного объекта, но на самом деле может быть любым объектом CWnd , имеющий соответствующий дочернее окно ID.nbsp;
Сделать это, просто пройти RU&NTIME_CLASS вашего CWnd производного класса, как если вы используете CView производные class.nbsp; Ваш класс должен использовать DECLARE_DYNCREATE и IMPLEMENT_DYNCREATE --платформа использует динамическое создание во время выполнения. Хотя есть много кода, CView конкретного CSplitterWnd CObject::IsKindOf всегда используется до того, как выполняются эти действия. Конечно гораздо проще использовать CSplitterWnd CView производные классы CWnd производные классы.
Разделитель:
Элемент управления помещается между строками и столбцами панелей. Он может использоваться для корректировки размеров строк или столбцов панелей.
Разделитель поля:
Небольшой элемент управления в верхней части вертикальные полосы прокрутки или слева горизонтальной полосы прокрутки в динамической CSplitterWnd. Используется для создания новых строк или столбцов панелей.
Разделитель пересечение:
Пересечение вертикальный разделитель и горизонтального разделителя. Может быть тащили одновременно изменить размер строки и столбца панелей.
Общей полосы прокрутки
Класс CSplitterWnd также поддерживает общие полосу прокрутки. Эти элементы управления полосы прокрутки являются дети CSplitterWnd и являются общими с различными областями в разделителя.
К примеру в окне столбец 1 ряд x 2, можно указать WS_VSCROLL при создании CSplitterWnd. Будет создан Специальный полосы прокрутки, который разделяется между двумя панелями.
[ ][ ][^]
[pane00][pane01][|]
[ ][ ][v]
Когда пользователь перемещается полоса прокрутки, WM_VSCROLL сообщения будут отправлены в обоих представлениях. Когда взгляды положение, будет задать общий прокрутки.
Обратите внимание, что общие прокрутки наиболее полезными с динамический или статический разбиений, разделение объектов аналогичных представлений. Если вы смешиваете взгляды различных типов в разделитель, может потребоваться написать специальный код для координировать свои позиции прокрутки. Любой CView-производного класса, использующий полосу прокрутки CWnd , интерфейсы API делегировать общей полосы прокрутки, если он существует. CScrollView осуществление является одним из таких примеров класса CView поддерживает разделяет полосы прокрутки. Non -CView производные классы, классы, которые полагаются на noncontrol полосы прокрутки или классы, которые используют стандартные Windows, реализации (например, CEditView) не будут работать с общей прокрутки бар особенностью CSplitterWnd.
Минимальные размеры
Для каждой строки есть высота минимум строки, и аналогично для каждого столбца представляет минимальную ширину колонки. Этот минимум используется для определения, если область является малым показан полный подробно.
Для статического разделитель окна первоначального минимального строки высоты и ширины столбца равно 0. Для динамической разделитель окна первоначальный минимальной высоты строки и столбца ширины задаются параметром sizeMin в функции CSplitterWnd::Create.
Эти минимальные размеры могут быть изменены с SetRowInfo и SetColumnInfo API-интерфейсы.
Фактическая — идеальный размеров
Расположение панелей в окне разделителя зависит от размера содержащего кадра (которая в свою очередь меняет размер CSplitterWnd. CSplitterWnd изменяет положение и изменяет размер панелей таким образом, чтобы они как можно идеально подходят).
Строки высоту столбца ширину размеры и задать для пользователя, или через CSplitterWnd API, представляют собой идеальный размер. Фактический размер может быть меньше, чем это идеальный размер (если нет достаточно места, чтобы сделать эту область идеального размера) или больше идеального размера (если эта панель необходимо сделать большее для заполнения оставшихся места правой или нижней части окна разделителя).
Защищенный интерфейс
Ниже описаны некоторые из overridables осуществление окна разделителя, которая используется опытными пользователями CSplitterWnd для настройки функции и пользовательский интерфейс данного класса. Эти интерфейсы API официально не документированы и могут быть изменены в будущих версиях MFC. Обратитесь к осуществлению исходный код для получения более подробной информации об этих реализации интерфейсов API.
Рисование вертикальные разделительные линии, коробки и трекеров:
e&num ESplitType nbsp; {splitBox, splitBar, splitIntersection, splitBorder};
виртуальный void OnDrawSplitter (CDC * pDC, ESplitType nType, const CRect и rect);
виртуальный void OnInvertTracker (const CRect и rect)
Эти виртуальные функции может быть переопределен для предоставления альтернативных изображений для различных графических компонентов окна разделителя. По умолчанию изображения похож на разделитель в Microsoft Works для Windows: только пересечений вертикальные разделительные линии сглаживаются вместе. Изображения также сильно отличается когда рамки определяет Windows 4.0 — с тем чтобы соответствовать визуальные эффекты в оболочке на этой операционной системе (будущего).
Создание элементов управления и представлений.:
виртуальный BOOL CreateScrollBarCtrl(DWORD dwStyle, UINT nID)
Это называется для создания общей полосы прокрутки. Он может быть переопределен для включения дополнительных элементов управления рядом с полосой прокрутки. Поведение по умолчанию — просто создавать обычные элементы управления полосы прокрутки Windows.
виртуальный void DeleteView (строку int, int УКЛР);
виртуальный BOOL SplitRow(int cyBefore);
виртуальный BOOL SplitColumn(int cxBefore);
виртуальный void DeleteRow (int ряд);
виртуальный void DeleteColumn (int ряд)
Эти функции вызываются для реализации логики динамической разделитель окна (то есть, если окно-разделитель в стиле SPLS_DYNAMIC_SPLIT ). Они можно настраивать, наряду с виртуальной функции CreateView, для реализации более сложные динамические сплиттеры.
Ниже приведены высокого уровня команды, используемые в классе CView делегировать реализации CSplitterWnd . Они являются виртуальными, так что не стандартные CView осуществление потребует всего CSplitterWnd осуществлением связаны в. Для приложений, которые используют CView , но не CSplitterWnd CSplitterWnd осуществление не будет увязываться с приложением.
виртуальный BOOL CanActivateNext(BOOL bPrev = FALSE);
Проверяет, является ли команда "следующий" или "Предыдущая" в настоящее время возможно.
виртуальный void ActivateNext (BOOL bPrev = FALSE);
Выполняет команду "следующий" или "Предыдущая".
виртуальный BOOL DoKeyboardSplit();
Выполняет клавиатуры разбить команду, обычно «разделения окна».
Технические примечания по номеру |nbsp; Технические примечания по категориям