This will be shown to users with no Flash or Javascript.
Урок VII
Резюме и Упражнение
Упражнения
1)Модифицируйте функцию OnPaint() таким образом, чтобы цвет круга можно было выбирать с помощью диалоговой панели IDD_CUSTOM_DIALOG.
2) Добавьте такой код в программу, чтобы, после выбора цвета в диалоговой панели IDD_CUSTOM_DIALOG, он менялся до того, как вы нажмете на кнопку OK.
Ответ к упражнениям
Модифицируйте код в функции OnPaint() следующим образом:
void CGraphDlg::OnPaint()
{
if (IsIconic())
{
//....
}
else
{
////Мой код начинается здесь////
// OnDrawgraphicsButton();
///Создать объект контекста устройства(DC)
CPaintDC dc(this);
//Создать новое перо
CPen MyNewPen;
//MyNewPen.CreatePen(PS_SOLID, 10, RGB(255,0,0));
switch(m_dlg.m_RedRadio)
{
case 0:
MyNewPen.CreatePen(PS_SOLID, 10, RGB(255,0,0));
break;
case 1:
MyNewPen.CreatePen(PS_SOLID, 10, RGB(0,255,0));
break;
case 2:
MyNewPen.CreatePen(PS_SOLID, 10, RGB(0,0,255));
break;
}
//Выбрать перо
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);
////Мой код заканчивается здесь////
//...
}
}
Созданная конструкция switch осуществляет выбор значний переменной m_RedRadio. Если ее значение равно 0, 1 или 2, то формируется перо с цветом соответствующим этим значениям.1- красный цвет, 2- зеленый, 3- голубой.
II.
Чтобы модифицировать программу Graph так, чтобы при выборе цветов, они менялись сразу же, а не после нажатия на кнопку OK, выполните следующие действия:
Выберете ClassWizard в меню View
Выберете закладку Message Maps в панели ClassWizard
Используйте диалоговую панель ClassWizard для выбора следующего события:
Class Name: CGraphDlg
Object ID: IDC_RED_RADIO
Messages: BN_CLICKED
Щелкните на кнопку Add Fucntion и в раскрывшемся окне нажмите кнопку OK.
Нажмите кнопку Edit Code и напишите следующий код в функции OnRedRadio():
void CSetDlg::OnRedRadio()
{
// TODO: Add your control notification handler code here
////Мой код начинается здесь////
UpdateData(TRUE);
////Мой код заканчивается здесь////
}
Таким образом при выборе радиокнопки RED переменная m_RedRadio обновляется текущим значением, и цвет круга соответственно меняется, если он не был до этого красным.
Аналогичным же образом свяжите другие радиокнопки (GREEN и BLUE).
Резюме
В этой главе показано, как создаются рисующие программы. Вы узнали о событии WM_PAINT и научились связывать код, рисующий графику, с функцией OnPaint. Были использованы различные графические функции. Вы также научились устанавливать таймер и связывать код с событием WM_TIMER, которое генерируется автоматически.