Автоматическая разбивка для элементов
управления
Автор: Mike Melnikov
Описание
Здесь представлены два класса ZSplitterDlg и ZSplitter
, которые помогут Вам добавить разделители в
диалоговое окно. Так же разделители сделают
возможным перемещение и изменение размеров
Ваших элементов управления.
Обратите внимание, что Вам не нужно будет
добавлять ресурсы и описывать зависимости между
эелементами управления. Деостаточно содавать
соответствующий размер и позицию контролов по
средствам функций:
void addControls(int count, bool connectVertical, ...);
void addControl(int id);
Демонстрационный проект показывает
автоматиеское добавление элементов управления в
классы CDialog , CPropertyPage , CView и CFormView .
Использование класса
Самый простой способ - это использовать шаблон ZSplitterDlgImpl .
Вам необходимо изменить:
- Родительский класс Вашего диалога на view класс,
- конструктор,
- второй параметр в макросе
BEGIN_MESSAGE_MAP , и
- функцию "on init" Вашего окна.
// в заголовке
class CTestDlg1 : public ZSplitterDlgImpl<CPropertyPage>
// в исходнике
CTestDlg1::CTestDlg1() : /*...*/ ZSplitterDlgImpl<CPropertyPage>(CTestDlg1::IDD) {}
BEGIN_MESSAGE_MAP(CTestDlg1, ZSplitterDlgImpl<CPropertyPage>)
// ...
END_MESSAGE_MAP()
BOOL CTestDlg1::OnInitDialog()
{
// ... здесь используем функцию addControl(s)
init();
// ...
}
Шаблон ZSplitterDlgImpl имеет второй параметр (ZSplitter2
по умолчанию). ZSplitter2 содержит в себе сам
сплиттер. Он имеет виртуальную функцию OnPaint()
- и Вы можете изменять её реализацию для
получения различных видов Вашего элемента
управления (см. класс CMyView1 в демонстрашке).
Шаблон ZSplitterDlgImpl поможет Вам
использовать сплиттер, но тогда Вы не сможете
использовать его базовый класс ZSplitterDlg (см.
класс CTestDlg2 ) в демонстрационном пректе.
Это пример Вашего диалога в редакторе ресурсов:
И пользователь может изменять его во время
выполнения приложения.
Для добавления контрола в "раскладку
сплиттера" используйте функции addControls
или addControl либо группу контролов: они будут
перемещаться совместно. Например
addControls(2,false,IDC_LIST6,IDC_LIST7);
addControls(2,true,IDC_LIST1,IDC_LIST8);
addControl(IDC_LIST9);
addControl(IDC_LIST2);
addControl(IDC_LIST3);
addControl(IDC_LIST4);
addControl(IDC_LIST5);
Кроме того Вы можете вручную добавлять класс
ZSPLITTER класс () на страницу. Посмотрите, как это
выглядит на рисунке, а так же в классе CTestDlg3
демонстрационного проекта.
|