Связывание событий с элементами управления
Связывание кода с событием BN_CLICKED кнопки Exit
При нажатии на кнопку Exit программа Graph.Exe завершится.void CGraphDlg::OnExitButton()
{
// TODO: Add your
control notification handler code here
////////Мой код начинается здесь///////////
OnOK();
////////Мой код заканчивается здесь///////////
}
Установка таймера
Программа Graph имеет таймер, который является программным механизмом, генерирующем событие WM_TIMER через равные промежутки времени. Код в нашей программе будет задавать частоту, с которой будет выполняться событие WM_TIMER. Если вы, например, зададите рабочий интервал равный 500 милисекунд, то событие WM_TIMER и связанный с ним код будет выполняться каждые 500 миллисекунд.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);
}
////////Мой код заканчивается здесь///////////
return TRUE; // return TRUE unless you set the focus to a
control
}
void CGraphDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message
handler code here
////Здесь начинается мой код////
KillTimer(1);
////Здесь заканчивается мой код////
}
Проверка таймера
Перед тем, как продолжить создание программы, мы должны убедиться, что таймер работает как положено.BOOL CGraphDlg::OnTimer(UINT
nIDEvent)
{
//....
////////Мой код начинается
здесь///////////
MessageBeep((WORD)-2);
////////Мой код заканчивается здесь///////////
CDialog::OnTimer(UINT nIDEvent);
}
Событие WM_PAINT
Событие WM_PAINT происходит каждый раз, когда необходимо перерисовать окно. Это бывает в таких случаях, когда, например, окно другой программы налажилось на вашу, то после закрытия той программы, в вашей программе программе круга уже не будет, так как его стерло другое окно. Если вы перетащили, к примеру, половину окна программы за рабочую облать, то опять же требуется перерисовка экрана. Windows сама не будет перерисовывать экран, она будет только генерировать сообщение WM_PAINT, а наша задача уже перерисовывать.BOOL CGraphDlg::OnDrawgraphicsButton()
{
// TODO: Add
your message handler code here
////////Мой код начинается здесь///////////
///Создать объект контекста устройства(DC)
CClientDC
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);
//Нарисовать круг
dc.Ellipse(&MyRectangle);
//Выбрать первоначальное перо
dc.SelectObject(pOriginalPen);
////////Мой код заканчивается здесь///////////
CDialog::OnPaint();
}
Здесь вы указываете координаты верхнего левого и нижнего правого угла. На нашем примере мы задали прямоугольник, отстоящий на 20 пикселов по оси X от левой стороны и на 10 пикселов сверху. Таким образом мы задали квадрат со стороной 100 пикселов.
Здесь рисуется эллипс, но на самом деле получается круг, так как координаты эллипса заданы квадратом. Круг является частным случаем эллипса.
Код перерисовки
void CGraphDlg::OnPaint()
{
if
(IsIconic())
{
//....
}
else
{
////Мой код начинается здесь////
OnDrawgraphicsButton();
////Мой код заканчивается здесь////
//...
}
}
Модификация функции OnPoint()
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);
//Нарисовать круг
dc.Ellipse(&MyRectangle);
//Выбрать первоначальное перо
dc.SelectObject(pOriginalPen);
////Мой код заканчивается здесь////
//...
}
}
Визуальное проектирование диалоговой панели IDD_CUSTOM_DIALOG и связывание событий с элементами управления(продолжение).
Радио для всех © |