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

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

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



Тестовое приложение CStyleButton_Test

Автор: Козак Н.В.
Кафедра КСУ, МГТУ "СТАНКИН"
Опубликовано: 15.05.2003
Версия текста: 1.0

Тестовое приложение CStyleButton_Test (NC_Button_Test2) демонстрирует возможности элемента управления CStyleButton. CStyleButton - полноценная объемная кнопка ОС Windows (рис 1).


Рис. 1 Внешний вид тестового приложения.

Кнопка моделирует освещение цилиндрической поверхности под различными углами к горизонту. Выпуклость кнопки изменяется от нулевой, до полукруглой. Минимальная освещённость кнопки так же варьируется. Тестовое приложение демонстрирует основные шаги по добавлению кнопки CStyleButton в проект и работе с ней.

Для работы с кнопкой необходимо использовать библиотеку NCViewPanel.dll. Описание CStyleButton представлено в файле NcViewPanel.doc.

Для работы с классом CStyleButton к проекту подключена библиотека NCViewPanel.dll. Для компиляции проекта включен заголовочный файл NCViewPanel.h и lib файл NCViewPanel.lib. В редакторе ресурсов в шаблон диалога тестового приложения добавлена стандартная кнопка ОС Windows. В классе диалога CNC_Button_Test2Dlg добавлена переменная класса CStyleButton:

CStyleButton m_Btn;

В функции инициализации диалога OnInitDialog выполнено связывание объекта типа CStyleButton с элементом управления в диалоге:

m_Btn.SubclassDlgItem(IDC_BUTTON1, this);

Далее используем функции настройки вида кнопки. Вначале устанавливаем базовый цвет кнопки, угол "Tau", угол "Gamma", задаём текст (см. Рис. 2).

m_Btn.BackColor = RGB(110, 255, 113);m_Btn.SetTau(90);m_Btn.SetGamm(10);m_Btn.strTextBtn ="BIG BIGnTEXT";m_Btn.SetFont(14,"Times New Roman");


Рис. 2 Внешний вид кнопки после инициализации

Для настройки угла освещения и выпуклости в приложении используются слайдеры (Sliders). В классе диалога заданы переменные для их позиций:

int m_nTrackBar1;int m_nTrackBar2;

В функции инициализации (OnInitDialog) начальные значения соответствующих углов:

m_nTrackBar1 = 10;m_nTrackBar2 = 90;

Далее в функции инициализации инициализированы диапазоны прокрутки ползунков, а также отображаются значения начального положения ползунков:

CString strText1;CSliderCtrl*pSlide1=(CSliderCtrl*)GetDlgItem(IDC_TRACKBAR1);pSlide1->SetRange(-90,90,TRUE);pSlide1->SetPos(m_nTrackBar1);strText1.Format("%d",pSlide1->GetPos());SetDlgItemText(IDC_STATIC_TRACK1,strText1);pSlide1 = (CSliderCtrl*)GetDlgItem(IDC_TRACKBAR2);pSlide1->SetRange(0,90,TRUE);pSlide1->SetPos(m_nTrackBar2);strText1.Format("%d",pSlide1->GetPos());SetDlgItemText(IDC_STATIC_TRACK2,strText1);

В обработчике сообщения WM_VSCROLL меняем параметры кнопки:

if(pScrollBar->GetDlgCtrlID() == IDC_TRACKBAR1){m_Btn.SetGamm((int)pSlide->GetPos());	SetDlgItemText(IDC_STATIC_TRACK1,strText);}if(pScrollBar->GetDlgCtrlID() == IDC_TRACKBAR2){	m_Btn.SetTau((int)pSlide->GetPos());	SetDlgItemText(IDC_STATIC_TRACK2,strText);}

Для настройки начальной освещённости используем счётчик(Spin).

Вначале объявили переменную, которая задаёт текущую начальную освещенность:

int m_nSpin;	

В функции инициализации задали диапазон и начальное значение счётчика:

m_nSpin = 20;CSpinButtonCtrl* pSpin = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN1);pSpin->SetRange(0,100);pSpin->SetPos(m_nSpin);strText1.Format("%d",m_nSpin);((CSpinButtonCtrl*)pSpin)->GetBuddy()->SetWindowText(strText1);

Добавили код обработки счётчика в обработчике сообщения WM_VSCROLL:

if (nSBCode == SB_ENDSCROLL)return;if(pScrollBar->GetDlgCtrlID() == IDC_SPIN1){	m_Btn.SetMinIntens(nPos); 	strText.Format("%d",nPos);	((CSpinButtonCtrl*)pScrollBar)->GetBuddy()->SetWindowText(strText);}

Для настройки шрифта на объёмном элементе управления используем стандартный диалог CFontDialog.

CFontDialog dlgFont(m_Btn.GetCurLf());//---------- init font dialog ---------------------------------------dlgFont.m_cf.rgbColors = m_Btn.FontColor;//---------- run font dialog ---------------------------------------if (dlgFont.DoModal() != IDOK)return;//---------- set font ---------------------------------------LOGFONT lf;dlgFont.GetCurrentFont(&lf);CFont tempFont;if(!tempFont.CreateFontIndirect(&lf))return;m_Btn.SetFont(&lf);tempFont.Detach();//----------- set color --------------------------------------m_Btn.FontColor =  dlgFont.GetColor();

Для настойки цвета объёмного элемента управления использовался стандартный диалог CColorDialog.

CColorDialog dlg(m_Btn.BackColor);//---------- init color dialog ---------------------------------------dlg.m_cc.Flags |= CC_FULLOPEN | CC_RGBINIT;//---------- run color dialog ---------------------------------------if (dlg.DoModal() != IDOK)return;//----------- set color --------------------------------------m_Btn.BackColor = dlg.GetColor();

Для настройки текста кнопки создали свой диалог с одним полем ввода и одной кнопкой "Ok". Поле редактирования связали с переменной типа CString, назначение которой - хранить текст объёмного элемента управления.

CString	 m_strNewText;

В коде для изменения текста ввели следующее:

m_TextDlg.m_strNewText = m_Btn.strTextBtn;if (m_TextDlg.DoModal() != IDOK)return;m_Btn.strTextBtn = m_TextDlg.m_strNewText;


ПРИМЕЧАНИЕ

 

Для полной информации о методах библиотеки NCViewPanel.dll см. документ "Объёмная кнопка CStyleButton"


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