Цієї записці описується MFC CSplitterWnd класу, який використовується для надання розділення вікон і керувати, зміна розміру інші області вікна.
Примітка будь ласка, не забудьте прочитати технічне Примітка 20 щодо використання ідентифікаторів і дійсні ID діапазонів.
Розділювач стилів
CSplitterWnd підтримує два різних стилі розщеплення windows.
В "статичний антенні," області створюються під вікна спліттер створюється, і порядок і кількість областей ніколи не зміниться. Розділення використовуються, щоб змінити розмір різних областей, і різних областей, як правило, різні подання класів. Графічний редактор Visual c + + і менеджер файлів Windows є прикладами програм, які використовують цей стиль сплиттер. Розділювач полів не використовують цей стиль спліттер.
В "Динамічних антенні," додаткових областей створюються і знищено як користувач розколи і ООН розколи нове подання. Це спліттер починається з одним поданням і розділювач полів надаються ініціювати розщеплення. Якщо подання розкол в одному напрямку, об'єкт додаткові подання динамічно створюється представляти нова область. Якщо подання ділиться у двох напрямках (можливо з клавіатура інтерфейс), то три нові погляди створюються представляє три нові області. Коли розкол активна полі спліттер звернено як роздільну лінію між. Додаткові подання, об'єкти були знищені, коли користувач видаляє розколу, але оригінальний вигляд (0 рядків, стовпців 0) залишається до саме вікно спліттер знищені. Microsoft Excel або Microsoft Word є прикладами динамічний спліттер стилю.
Під час створення будь-якого роду спліттер вікно, необхідно вказати максимальну кількість рядків і стовпців, які будуть керувати спліттер. Для статичного спліттер областей повинні бути створені, щоб заповнити всі рядки та стовпці. Для динамічного спліттер першої області створюється автоматично під час CSplitterWnd.
Максимальна кількість областей, можна вказати для статичного антенні – 16 рядків на 16 стовпців. Є рекомендованої конфігурації:
Максимальна кількість областей, можна вказати для динамічного антенні є 2 рядки на 2 колонки. Є рекомендованої конфігурації:
Приклади спліттер
Багато хто з MFC приклади програм використовують спліттер windows, прямо або побічно. Крок 4 MFC підручника КАРАКУЛІ додає динамічний спліттер вікно розділити на CScribView на декілька областей. Як показано на цьому етапі, додавши нове вікно кадр спліттер дуже легко з особливістю додати клас ClassWizard. У цьому прикладі це динамічний спліттер вікно за замовчуванням.
Генеральний MFC зразок VIEWEX ілюструє кілька використовує статичний антенні, включаючи те, як розмістити спліттер в спліттер.
ClassWizard буде також створити нову кілька документа інтерфейс (MDI) дитини кадр вікно класу, який містить спліттер вікно. Будь ласка, зверніться до спліттер Windows у посібнику Visual c + + програміст.
Термінологія, яка використовується на здійснення
Термінологія частин CSplitterWnd та пов'язані з ним об'єкти.
CSplitterWnd:
Це вікно, яке надає області розділення елементів керування та смуги прокручування, які розподіляються між всіх областей на рядок або стовпець. Рядки та стовпці вказано COLUMN номерів [тобто першої області є рядок = 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 repositions та змінює розмір області, так що вони вписуються в ідеалі, наскільки це можливо).
Рядок висоти та стовпця шириною розміри встановити користувачем, або через CSplitterWnd API, являють собою ідеальний розмір. Фактичний розмір може бути менше, ніж що ідеальний розмір (якщо не достатньо місця, щоб зробити цю область ідеальний розмір) або більше, ніж ідеальний розмір (якщо ця область повинна зроблені великі для заповнення простору залишилося over на справа або знизу спліттер вікна).
Захищений інтерфейс
Нижче описано деякі спліттер вікно виконання overridables, який може використовуватися досвідченими користувачами CSplitterWnd можна настроїти функції та інтерфейс користувача цього класу. Ці API для офіційно незадокументовані і змінюватися в майбутніх версіях MFC. Будь ласка, зверніться до здійснення вихідного коду для більш докладної інформації про ці виконання API.
Малювання роздільні смуги, коробки і трекер:
enum ESplitType nbsp; {splitBox, splitBar, splitIntersection, splitBorder};
Віртуальний недійсним OnDrawSplitter (CDC * pDC, ESplitType nType, константа CRect & rect);
Віртуальний недійсним OnInvertTracker (константа CRect & rect)
Ці функції можна змінити забезпечити альтернативний образів різні графічні компоненти вікна сплиттер. Знімків замовчуванням схожий на лінію в Microsoft Works для Windows: тільки перетинів розділення змішані разом. Зображення також є зовсім інша, коли рамках виявляє Windows 4.0 - для того, щоб відповідати візуальні ефекти в оболонку на що (майбутнього) операційної системи.
Створення елементів керування та переглядів:
віртуальний BOOL CreateScrollBarCtrl(DWORD dwStyle, UINT nID)
Це називається для створення спільної смуги прокрутки. Це може бути скасоване включати додаткові елементи керування поруч смугу прокручування. Поведінка за промовчанням є просто створення звичайного Windows прокручування Бар контролю.
віртуальний недійсним DeleteView (int рядок, int col);
Віртуальний BOOL SplitRow(int cyBefore);
Віртуальний BOOL SplitColumn(int cxBefore);
Віртуальний недійсним DeleteRow (int рядок);
Віртуальний недійсним DeleteColumn (int рядок)
Ці функції називаються для здійснення логіки динамічний спліттер вікна (тобто, якщо вікно спліттер має стиль SPLS_DYNAMIC_SPLIT ). Вони можуть бути налаштовані, поряд з віртуальної функції CreateView, здійснювати розширений динамічний антенні.
Нижче наведено високий рівень команд, які використовуються CView клас делегувати реалізації CSplitterWnd . Вони віртуальна, таким чином, щоб стандартні реалізація CView не потребує весь CSplitterWnd реалізації бути пов'язані в. Для програм, які використовують CView , але не CSplitterWndреалізації CSplitterWnd буде не пов'язаний з застосування.
віртуальний BOOL CanActivateNext(BOOL bPrev = FALSE);
Перевіряє, чи можливо в даний час команди "Наступна область" або "Попередня область".
віртуальний недійсним ActivateNext (BOOL bPrev = FALSE);
Виконує команду "Наступна область" або "Попередня область".
віртуальний BOOL DoKeyboardSplit();
Виконує клавіатури, розділити команду, зазвичай "розбиття вікна".
Технічні примітки за номером |nbsp; Технічні примітки за категоріями