Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Клуб профессиональных программистов :: Выпуск #40




Здравствуйте, уважаемые читатели!



Сегодня мы представляем вам статью нашего автора Алексей1153/

Элемент управления - Сплиттер (Splitter control)




Доброе время суток.
В этой статье представлен класс CSplitter1153 (далее - компонент или просто сплиттер), написанный в среде VC++6 с использованием библиотеки MFC. Класс нашего компонента произведён от класса CStatic. Предназначен сплиттер для динамического изменения пользователем размера и положения элементов управления (производных от класса CWnd) на диалоговой форме. Сплиттер, как элемент управления, располагается на любом объекте, класс которого произведён от CWnd (если не вдаваться в крайности , то на объектах типа CDialog, CDialogBar, CFormView и так далее). Также на нашем сплиттере можно отображать полосу прогресса. Код класса открыт, можете делать с ним что угодно.
Исходный код компонента представлен в 2 файлах (их можно взять из файлов проекта, который находится по ссылке в конце статьи):

Splitter1153.h заголовочный файл класса компонента.
Splitter1153.cpp файл реализации класса компонента.




Тестовый проект для этой статьи, как уже было сказано, можно найти по ссылке в конце статьи. Но представим, что проект ещё не создан. Здесь будет описано, как производится вставка компонента в проект и работа с ним.
Создаём тестовый проект SplitterTest (MFC , Dialog-based). Копируем в папку с проектом файлы класса компонента, описанные выше. Добавляем файлы также в дерево файлов проекта. После этого рекомендуется удалить из папки проекта файл "имя_проекта.clw" (можно даже не закрывая студию). Затем в студии нажать Ctrl+W для того, чтобы обновилось дерево классов.
Описываемый класс является производным от MFC-класса CStatic. Поэтому, чтобы поместить компонент на диалоговое окно в режиме редактирования ресурсов, надо положить на диалог контрол CStatic из стандартной палитры конторолов. Затем надо добавляем для статика связанный с ним член-переменную: удерживая Ctrl, дважды щелкаем по статику, пишем имя переменной m_..... , в окне Category -> выбираем Control, в окне Variable Type -> выбираем наш класс CSplitter1153. Также не забываем добавить в заголовочный файл диалога перед описание класса диалога строчку:
Код:
 #include "Splitter1153.h"

Тут надо отметить следующий момент. Сплиттер может быть горизонтальный или вертикальный. Когда CStatic кладётся на форму , это никак не предопределено, это будет задано в свойствах объекта в программе. Тем не менее, можно для наглядности придать статику форму , близкую к желаемой. Поскольку границу у статика (когда в нем нет текста) в редакторе ресурсов не видно, то для того, чтоб сделать статик заметным можно вписать, например, "= = = " (чередование "=" и пробелов) по всей длине статика. В вертикальном статике, за счёт наличия пробелов, "=" расположатся на всех строчках и равномерно распределятся по высоте.
У сплиттера имеется два размера - "основной" и "не основной" . Для горизонтального основной - это высота. Для вертикального - ширина. Контрол следит только за своим основным размером, а второй размер остаётся такой, какой был установлен в редакторе ресурсом. Конечно, его можно изменить в процессе работы программы методом CWnd::MoveWindow() . Величина основной размера может задаваться через метод контрола.

Итак, для примера создадим два сплиттера - горизонтальный и вертикальный. Зададим идентификаторы IDC_SP_H (для горизонтального) и IDC_SP_V (для вертикального). Добавляем для них связанные переменные класса CSplitter1153 с именами m_IDC_SP_H и m_IDC_SP_V соответственно (как описано выше - удерживая Ctrl, дважды щелкаем). Поставьте в свойствах статиков следующие галочку Notify. Если не поставить галочку, то контрол не будет реагировать на щелчки мышью. Не забываем добавить в заголовочный файл диалога перед описанием класса диалога строчку:
Код:
 #include "Splitter1153.h"
Компилируем проект (нет ли ошибок ?) и сохраняем.



Прочитать статью целиком, а также обсудить ее можно на нашем форуме по ссылке: http://club.shelek.com/viewart.php?id=288


Ждем вас также в разделе форума "Идеи для статей".
Здесь собраны вопросы, ответы на которые не сформулировать в двух словах. Попробуйте свои силы.

Подробнее по ссылке: http://forum.shelek.com/index.php/board,105.0.html

И не забудьте посетить наш "домик" на карте в Интернете по ссылке
http://www.internetmap.info/cgi-bin/go.cgi?site_id=4131%22%20



А теперь прощаемся с Вами до следующего выпуска.

                                        С уважением, команда Клуба.




В избранное