Научно-исследовательская лаборатория систем ЧПУ
Научно-исследовательская лаборатория систем ЧПУ

Поиск по сайту:
 

Расписание курсов "Программирование SINUMERIK 810D/840D/840Di"



Класс CPanel

Автор: Пушков Р. Л.
Кафедра КСУ МГТУ "СТАНКИН"
Тестовое приложение CPanelDemo с исходным текстом  размер файла: 13,1 Kб

Библиотека CPanel  размер файла: 22,1 Kб

Класс CPanel предназначен для создания обрамления различного вида в Windows приложениях. CPanel выполнен в виде класса, унаследованного от CWnd библиотеки MFC и дополняет базовый класс функциональностью по формированию рамок различного вида. В остальном, функциональность CPanel совпадает с функциональностью базового класса CWnd.

ПРИМЕЧАНИЕ

Класс написан с помощью MSVC 6.0 с использованием библиотеки MFC и может быть использован только в MFC проектах на языке C++.

Класс имеет ряд встроенных предопределенных видов рамок. Также класс может быть настроен для показа так называемых пользовательских рамок, т.е. рамок, произвольно сконфигурированных пользователем.

Для демонстрации основных возможностей класса может быть использовано демонстрационное приложение CPanelDemo (Рис. 1). Приложение позволяет демонстрировать как стандартные виды рамок (верхняя часть окна на рис. 1), так и процесс создания пользовательских рамок (нижняя часть окна на рис. 1).


Рис. 1. Демонстрационное приложение CPanelDemo

Используя демонстрационное приложение можно получить представление о предопределенных видах рамок путем задания типа рамки "Choose a border style".

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

Метод формирования рамок

Основой для создания рамки является понятие слоя (layer). Рамка может состоять из одного или нескольких слоев. Каждый слой имеет цвет и толщину в пикселах, заданную для каждой стороны рамки. Рассмотрим формирование рамки на примере рис.2:


Рис.2. Пример формирования рамки

Рамка на рис.2 состоит из трех слоев: layer 1 - красного цвета, layer 2 - зеленого цвета и layer 3 - синего цвета. Слои 1 и 3 имеют постоянную толщину равную 1 пикселу. Слой 2 имеет толщину равную 1 пикселу для левой и нижней стороны и нулевую толщину для правой и верхней стороны.

Для слоев layer 2 и layer 3 ширина сторон задается аналогично. Для слоя layer 2 ширина сторон nRight и nTop равна 0.

Использование класса CPanel

Чтобы воспользоваться классом CPanel, в первую очередь, необходимо включить в проект заголовочный файл Panel.h и файл cpanel.lib для компоновки. Необходимо также, чтобы файл cpanel.dll находился в каталоге с приложением.

Для использования класса CPanel в своем приложении нужно проделать следующие шаги:

Добавить в класс диалога (или другого окна содержащего элемент, для которого необходима рамка) объект класса CPanel, если будет использоваться субклассинг (в этом случае также необходимо добавить в шаблон диалога элемент управления, для которого будет использоваться рамка), либо унаследовать свой класс от CPanel для получения необходимой функциональности.

class CPanelDemoDlg : public CDialog
{
private:
// ...
	CPanel OwnBorder;
// ...
};

Если используется субклассинг, произвести его, и установить вид рамки в методе OnInitDialog ().

BOOL CPanelDemoDlg::OnInitDialog()
{
// ...
// ------------ Cpanel Init ---------------
	OwnBorder.SubclassDlgItem (IDC_STATIC, this);
	OwnBorder.Apply3DStyle (0, TRUE);
// ...
}

Установить необходимый пользовательский внешний вид рамки:

void CPanelDemoDlg::OnRadio6()
{
// ...
// установка пользовательского стиля рамки
OwnBorder.SetBorderLayer (layer, 0, 0, 2, 2, 0x000000FF);
OwnBorder.SetBorderLayer (layer + 1, 0, 2, 2, 0, 0x00C0C0C0);
OwnBorder.SetBorderLayer (layer + 2, 2, 2, 0, 0, 0x000000FF);
OwnBorder.SetBorderLayer (layer + 3, 2, 0, 0, 2, 0x00C0C0C0);
OwnBorder.SetBorderLayer (layer + 4, 0, 0, 2, 2, 0x000000FF);
OwnBorder.SetBorderLayer (layer + 5, 0, 2, 2, 0, 0x00C0C0C0);
OwnBorder.SetBorderLayer (layer + 6, 2, 2, 0, 0, 0x000000FF);
// ...
}

или использовать один из предустановленных стилей:

void CPanelDemoDlg::OnRadio6()
{
// ...
// установка стиля рамки
OwnBorder.Apply3DStyle (4, TRUE);
// ...
}

Методы класса CPanel

void SetNcsFlag(DWORD dwFlag, BOOL bNotify = TRUE)

Установка флагов рамки.

Параметры:

dwFlag - флаг, который необходимо изменить

Значения, принимаемые dwFlag:

NCS_CTRL_OWN_BORDER - отрисовка пользовательской рамки,

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

bNotify - если TRUE, то происходит оповещение об изменении флага.

void ClearNcsFlag(DWORD dwFlag, bool bNotify = TRUE)

Сброс флагов рамки.

Параметры:

dwFlag - флаг, который необходимо сбросить

Значения, принимаемые dwFlag:

NCS_CTRL_OWN_BORDER - отрисовка пользовательской рамки,

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

bNotify - если TRUE, то происходит оповещение об изменении флага.

BOOL IsNcsFlag(DWORD dwFlag)

Узнать состояние флага.

Параметры:

dwFlag - флаг, состояние которого необходимо узнать

Значения, принимаемые dwFlag:

NCS_CTRL_OWN_BORDER - отрисовка пользовательской рамки,

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

Возвращаемое значение:

TRUE, если флаг установлен, иначе FALSE.

virtual void SetBorderLayer(int nLayer = 0, int nLeft = 1, int nTop = 1, int nRight = 1, 
                            int nBottom = 1, OLE_COLOR crColor = 0)

Задать вид слоя рамки (для рамки пользователя).

Параметры:

nLayer - номер слоя;

nLeft - ширина левой линии в пикселах;

nTop - ширина верхней линии в пикселах;

nRight - ширина правой линии в пикселах;

nBottom - ширина нижней линии в пикселах;

crColor - цвет линий слоя;

static void SetCommonBorderLayer(int nLayer = 0, int nLeft = 1, int nTop = 1, int nRight = 1, 
                                 int nBottom = 1, OLE_COLOR crColor = 0)

Задать вид слоя рамки (для общего вида рамок).

Параметры:

nLayer - номер слоя;

nLeft - ширина левой линии в пикселах;

nTop - ширина верхней линии в пикселах;

nRight - ширина правой линии в пикселах;

nBottom - ширина нижней линии в пикселах;

crColor - цвет линий слоя;

virtual OLE_COLOR GetBorderLayer(int nLayer, int& LeftWidth, int& TopWidth, int& RightWidth, int& BottomWidth)

Определить параметры слоя рамки.

Параметры:

nLayer - номер слоя;

LeftWidth - ширина левой линии в пикселах

TopWidth - ширина верхней линии в пикселах

RightWidth - ширина правой линии в пикселах

BottomWidth - ширина нижней линии в пикселах

Возвращаемое значение: цвет слоя.

int GetNumBorderLayers(void)

Определить число слоев в рамке.

Возвращаемое значение: число слоев в рамке.

void DeleteBorderLayer(int nLayer = -1)

Удалить слой рамки (для рамки пользователя).

Параметры:

nLayer - номер удаляемого слоя.

Если nLayer = -1, то удаляются все слои.

static void DeleteCommonBorderLayer(int nLayer = -1)

Удалить слой рамки (для общего вида рамок).

Параметры:

nLayer - номер удаляемого слоя.

Если nLayer = -1, то удаляются все слои.

void Apply3DStyle(UINT nBorderType = 0, bool bDeleteBorders = FALSE)

Установить один из определенных видов рамки.

Параметры:

nBorderType - вид рамки, может принимать значения:

Значения, принимаемые nBorderType:

0 - рамка отсутствует,

1 - вид ,

2 - вид ,

3 - вид ,

4 - вид .

bDeleteBorders - если TRUE, то перед установкой типа информация о прошлых слоях будет уничтожена. Иначе, новые слои будут добавлены к уже существующим.


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