Опубликован: 17.08.2010 | Доступ: свободный | Студентов: 999 / 59 | Оценка: 4.11 / 3.89 | Длительность: 29:38:00
Самостоятельная работа 20:

Упаковка кода в статическую библиотеку Win32Lib

Создание ассоциированных переменных для элементов управления

Добавим переменные, которые свяжут элементы управления и код программы и обеспечат обмен значениями того, что на экране и этих переменных.

  • Выделите элемент IDC_EDIT_RADIUS и через контекстное меню вызовите мастер Add Variable, который заполните так

  • Выделите элемент IDC_EDIT_AREA и через контекстное меню вызовите мастер Add Variable, который заполните так

Для реализации механизма обмена DDX мастер добавит не только описания переменных в класс, но и в функцию DoDataExchange() также добавит код

Код для реализации DDX-механизма обмена
void CTestLibDlg::DoDataExchange(CDataExchange* pDX)
{
  CDialog::DoDataExchange(pDX);
  DDX_Text(pDX, IDC_EDIT_RADIUS, m_iRadius);
  DDX_Text(pDX, IDC_EDIT_AREA, m_fArea);
}

Добавление управляющего кода

Прежде всего нужно создать в классе поддержки диалогового окна приложения CTestLibDlg экземпляр ранее разработанного нами класса CCircle, считая, что он доступен тестовому приложению.

  • В файле TestLibDlg.h добавьте в конец класса CTestLibDlg следующий код
    Включение объекта круга в описание класса диалогового окна
    // TestLibDlg.h : header file
    //
    
    #pragma once
    
    // CTestLibDlg dialog
    class CTestLibDlg : public CDialog
    {
    ..................................................
    private:
      // Переменная для поля радиуса
      int m_iRadius;
      // Переменная для поля площади
      float m_fArea;
      CCircle circle;
    };
  • В метод OnInitDialog() класса CTestLibDlg в самый конец перед оператором return добавьте код инициализации
    Код инициализации в файле TestLibDlg.cpp
    BOOL CTestLibDlg::OnInitDialog()
    {
    .......................................................
      // TODO: Add extra initialization here
      m_iRadius = circle.GetRadius();
      m_fArea = circle.GetArea();
      UpdateData(FALSE);
      
      return TRUE;  // return TRUE  unless you set the focus to a control
    }
  • Постройте проект приложения и убедитесь, что оно работает, но пока не хватает функциональности

Дальше мы добавим функциональность к элементам управления, а пока наше тестовое приложение после запуска должно выглядеть так


Обратите внимание, что начальный радиус (5) сгенерирован конструктором класса CCircle со значением параметра по умолчанию, которое мы задали ранее при разработке класса.

Связывание кода с кнопкой "Выход"
  • В режиме дизайна двойным щелчком по кнопке Выход создайте обработчик и внесите в него код завершения приложения
    Обработчик кнопки "Выход"
    void CTestLibDlg::OnBnClickedButtonExit()
    {
      // TODO: Add your control notification handler code here
      OnOK();
    }
Связывание кода с кнопкой "Решить"
  • В режиме дизайна двойным щелчком по кнопке Решить создайте обработчик и внесите в него код
    Обработчик кнопки "Решить"
    void CTestLibDlg::OnBnClickedButtonExecute()
    {
      // TODO: Add your control notification handler code here
      UpdateData(TRUE);
      circle.SetRadius(m_iRadius);
      m_fArea = circle.GetArea();
      UpdateData(FALSE);
    }
Связывание кода с кнопкой "Показать"
  • В режиме дизайна двойным щелчком по кнопке Показать создайте обработчик и внесите в него код
    Обработчик кнопки "Показать"
    void CTestLibDlg::OnBnClickedButtonDisplay()
    {
      // TODO: Add your control notification handler code here
      OnBnClickedButtonExecute();
      circle.DisplayArea();
    }

В последнем обработчике мы задействовали код предыдущего обработчика, чтобы показывать в диалоговом окне свежую информацию.

Запуск теста и оформление About

  • Постройте приложение и убедитесь в его работоспособности
  • Смените иконку приложения и оформите About

Александр Даниленко
Александр Даниленко
Стоит Windows 8 Pro, Visual Studio 2010 Express Edition .