Связывание событий с элементами управления
Проектирование диалоговой панели
Сейчас мы визуально спроектируем диалоговую панель. Для этого вначале выбирете закладку "Resourse View" и раскройте пункт Graph Resource. Выполните слдеующие действияТаблица 2.0
Объект | Свойство | Установка |
Dialog Box | ID | IDD_CUSTOM_DIALOG |
Caption | Set Graph | |
Font | System, Size 10, страница Styles | |
Radio Button | ID | IDC_RED_RADIO |
Caption | &Red | |
Group | отмечен, страница General | |
Modal frame | отмечен, страница Extended Styles | |
Client edge | отмечен, страница Extended Styles | |
Static edge | отмечен, страница Extended Styles | |
Radio Button | ID | IDC_GREEN_RADIO |
Caption | &Green | |
Group | не отмечен, страница General | |
Modal frame | отмечен, страница Extended Styles | |
Client edge | отмечен, страница Extended Styles | |
Static edge | отмечен, страница Extended Styles | |
Radio Button | ID | IDC_BLUE_RADIO |
Caption | &Blue | |
Group | не отмечен, страница General | |
Modal frame | отмечен, страница Extended Styles | |
Client edge | отмечен, страница Extended Styles | |
Static edge | отмечен, страница Extended Styles |
Связывание переменной с радиокнопками
Создание объекта класса CSetDlg
class CGraphDlg : public CDialog
{
//
Construction
public:
CGraphDlg(CWnd* pParent = NULL); //
standard constructor
////Мой код начинается здесь////
CSetDlg m_dlg;
////Мой код заканчивается здесь////
...
}
// GraphDlg.h : header file
//
////Мой код начинается здесь////
#include "SetDlg.h"
////Мой код заканчивается
здесь////
...
...
Модификация кода кнопки Draw Graphics
BOOL CGraphDlg::OnDrawgraphicsButton()
{
// TODO: Add
your message handler code here
////////Мой код начинается здесь///////////
m_dlg.DoModal();
////////Мой код заканчивается здесь///////////
}
который вызывает диалговую панель IDD_CUSTOM_DIALOG(выводит объект m_dlg).
Инициализация радиокнопок
BOOL
CGraphDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//....
////////Мой
код начинается здесь///////////
///Установить системный таймер
int
iInstallResult;
iInstallResult=SetTimer(1, 50,
NULL);
if(iInstallResult==FALSE)
{
MessageBox("Cannot
install timer",
"Error message",
MB_OK+MB_ICONERROR);
}
//Выбрать радиокнопку RED
m_dlg.m_RedRadio=0;
////////Мой код заканчивается здесь///////////
return TRUE; // return TRUE unless you set the focus to a
control
}
Добавление переменных элементов в класс CGraphDlg
class CGraphDlg : public CDialog
{
//
Construction
public:
CGraphDlg(CWnd* pParent = NULL); //
standard constructor
////Мой код начинается здесь////
CSetDlg m_dlg;
int m_Radius;
int m_Direction;
////Мой код заканчивается
здесь////
...
}
Инициализация радиокнопок
BOOL
CGraphDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//....
////////Мой
код начинается здесь///////////
///Установить системный таймер
int
iInstallResult;
iInstallResult=SetTimer(1, 50,
NULL);
if(iInstallResult==FALSE)
{
MessageBox("Cannot
install timer",
"Error message",
MB_OK+MB_ICONERROR);
}
//Выбрать радиокнопку RED
m_dlg.m_RedRadio=0;
m_Radius=50;
m_Direction=1;
////////Мой код заканчивается здесь///////////
return TRUE; // return TRUE unless you set the focus to a
control
}
m_Radius=50;
m_Direction=1;
Связвание кода с событием Timer
В начале программы мы написали код, который генерирует событие WM_TIMER, каждые 500 миллискекунд. Теперь необходимо дополнить этот код:BOOL CGraphDlg::OnTimer(UINT
nIDEvent)
{
//....
////////Мой код начинается
здесь///////////
//MessageBeep((WORD)-2);
m_Radius=m_Radius+m_Direction;
if(m_Radius>=100)
{
m_Direction=-1;
}
if(m_Radius<=10)
{
m_Direction=1;
}
//Инициировать исполнение функции OnPaint() Invalidate(); ////////Мой код заканчивается здесь///////////
CDialog::OnTimer(UINT nIDEvent);
}
которые оперделяют: 1) если значение переменной m_Radius больше или равно 100, то переменная m_Direction принимает значение -1, и тогда радиус круга начинает уменьшаться. 2) когда значение переменной равно m_Radius меньше или равно 10, тогда все происходит наоборот.
Модификация кода, связанного с событием WM_POINT
void CGraphDlg::OnPaint()
{
if
(IsIconic())
{
//....
}
else
{
////Мой код начинается здесь////
// OnDrawgraphicsButton();
///Создать объект контекста устройства(DC)
CPaintDC
dc(this);
//Создать новое перо
CPen
MyNewPen;
MyNewPen.CreatePen(PS_SOLID, 10, RGB(255,0,0));
//Выбрать перо
CPen*
pOriginalPen;
pOriginalPen=dc.SelectObject(&MyNewPen);
//
CRect MyRectangle(20, 10, 120,110);
CRect MyRectangle(20, 10, 20+m_Radius*2,10+m_Radius*2);
//Нарисовать круг
dc.Ellipse(&MyRectangle);
//Выбрать первоначальное перо
dc.SelectObject(pOriginalPen);
////Мой код заканчивается здесь////
//...
}
}
видно что, когда значение переменной m_Radius будет равно 50, то диаметр круга будет равен 20+50*2=120. Когда значение переменной m_Direction будет равно -1, то радиус будет уменьшаться.
Управление цветом
Радио для всех © |