Связывание событий с элементами управления
Проектирование диалоговой панели
Сейчас мы визуально спроектируем диалоговую панель. Для этого вначале выбирете закладку "Resourse View" и раскройте пункт Graph Resource. Выполните слдеующие действия
Таблица 7.0
| Объект | Свойство | Установка |
| Dialog Box | ID | IDD_CUSTOM_DIALOG |
| Caption | Set Graph | |
| Font | System, Size 10, страница General | |
| Radio Button | ID | IDC_RED_RADIO |
| Caption | &Red | |
| Group | отмечен, страница General | |
| Radio Button | ID | IDC_GREEN_RADIO |
| Caption | &Green | |
| Group | не отмечен, страница General | |
| Radio Button | ID | IDC_BLUE_RADIO |
| Caption | &Blue | |
| Group | не отмечен, страница General |
Связывание переменной с радиокнопками
Создание объекта класса CSetDlg
// Constructor
public:
CGraphDlg(CWnd* pParent = NULL); // standard constructor
////Мой код начинается здесь////
CSetDlg m_dlg;
////Мой код заканчивается здесь////
...
}
Модификация кода кнопки Draw Graphics
// TODO: Add your message handler code here
////////Мой код начинается здесь///////////
m_dlg.DoModal();
////////Мой код заканчивается здесь///////////
}
который вызывает диалговую панель IDD_CUSTOM_DIALOG(выводит объект m_dlg).
Инициализация радиокнопок
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
////Мой код начинается здесь////
CSetDlg m_dlg;
int m_Radius;
int m_Direction;
////Мой код заканчивается
здесь////
...
}
Инициализация радиокнопок
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
}
Связвание кода с событием Timer
В начале программы мы написали код, который генерирует событие WM_TIMER, каждые 500 миллискекунд. Теперь необходимо дополнить этот код://....
////////Мой код начинается здесь///////////
//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);
}
Модификация кода, связанного с событием WM_POINT
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);
////Мой код заканчивается здесь////
//...
}
}
Управление цветом