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, которое генерируется автоматически.
Вернуться
<-Назад|Содержание
Используются технологии uCoz