Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
37
Добавлен:
16.02.2016
Размер:
4.72 Mб
Скачать

3.9. Кодирование проекта

Остов заголовочных и исполняемых файлов приложения сделаны AppWizard. Нам остается вписать в созданные им файлы коды, обеспечивающие ввод исходных данных, вычисления и вывод результатов в соответствующие окна редактирования на диалоговой панели. Другими словами, нам нужно доработать упомянутые файлы и вдохнуть в них функциональность нашего приложения.

3.9.1.Доработка заголовочного файла CapStDlg.H

Для этого в области ProjectWorkspaseна вкладкеFileVievпоследовательно раскроем пунктCupStfiles, папкуHeaderFilesи дважды щелкнем на пунктеCapStDlg.h. При этом в окне редактирования кода открывается код заголовочного файлаCapStDlg.h.

В объявлении класса classCCupStDlg:publicCdialogнеобходимо объявить функции для вычисления значений всех искомых и промежуточных переменных:A1,A2,A3,A,V,m,D, а также исходных переменныхd,H,s,Rn,pi. Ниже приведен фрагмент кода заголовочного файлаCapStDlg.h, созданногоAppWizardс указанием места вставки упомянутых выше объявлений:

// CupStDlg.h : header file

//

#if !defined(AFX_CUPSTDLG_H__2BF3ADE8_545E_11DA_BE20_00115B638F0C__INCLUDED_)

#define AFX_CUPSTDLG_H__2BF3ADE8_545E_11DA_BE20_00115B638F0C__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

/////////////////////////////////////////////////////////////////////////////

// CCupStDlg dialog

class CCupStDlg : public CDialog

{

// Construction

public:

CCupStDlg(CWnd* pParent = NULL); // standard constructor

//Здесь нужно вставить определения функций для вычисления искомых переменных //и определения исходных переменных d,H,s,Rn,pi

// Например:

doubled,H,s,Rn,rho,pi;// Определения исходных переменных

doubleArea(void);// Определение функции для вычисления площади поверхности

…………………….;

……………………..;

…………………….;

…………………….;

…………………….;

doubleDBlank(void);// Определение функции для вычисления диаметра заготовки

// Dialog Data

//{{AFX_DATA(CCupStDlg)

enum { IDD = IDD_CUPST_DIALOG };

double m_Edit_d;

double m_Edit_h;

double m_Edit_Rn;

double m_Edit_s;

double m_Edit_rho;

double m_Edit_A;

double m_Edit_m;

double m_Edit_diam;

double m_Edit_V;

//}}AFX_DATA

……………………………………..

//Оставшуюся и не приведенную здесь часть кода оставляем без изменения

3.9.2. Доработка исходного файла CupStDlg.Cpp.

В исходном файле CupStDlg.cppпосле тела любой функции, созданнойAppWizard, необходимо вставить определения всех семи функций объявленных в заголовочном файле. Для этого двойным щелчком по имени файлаCupStDlg.cpp, размещенного в открытой папкеSourceFilesокна проекта, открываем текст исходного кода, нужный фрагмент которого приведен ниже и будет использован для доработки-вставки упомянутых выше определений функций приложения:

// CupStDlg.cpp : implementation file

//

#include "stdafx.h"

#include "CupSt.h"

#include "CupStDlg.h"

#include <math.h> // вставлено разработчиком проекта

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog

{

public:

CAboutDlg();

// Dialog Data

//{{AFX_DATA(CAboutDlg)

enum { IDD = IDD_ABOUTBOX };

//}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

//}}AFX_VIRTUAL

// Implementation

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

//{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

}

//Здесь нужно вставить

//Функции-члены класса, обеспечивающие результаты расчета параметров

// проектируемого стакана. К примеру, начнем с функции вычисления площади //поверхности дна стакана Area1(void)

double CCupStDlg::Area1(void)

{

doubleA1;

A1=pi*(d-2*Rn)*(d-2*Rn)/4; //Переменная А1 возвращает площадь дна стакана

returnA1;

}

…………………………………..

……………………………………

……………………………………

……………………………………

……………………………………

doubleCCupStDlg::DBlank(void) // Функция вычисляет диаметр заготовки

{

double A,D;

A=Area();

D=sqrt(4*A/pi);// ПеременнаяDвозвращает вычисленное значение диаметра //заготовки

return D;

}

// Конец функций-членов, созданных разработчиком проекта

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

// No message handlers

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CCupStDlg dialog

CCupStDlg::CCupStDlg(CWnd* pParent /*=NULL*/)

: CDialog(CCupStDlg::IDD, pParent)

{

//{{AFX_DATA_INIT(CCupStDlg)

m_Edit_d = 0.0;

m_Edit_h = 0.0;

m_Edit_Rn = 0.0;

m_Edit_s = 0.0;

m_Edit_rho = 0.0;

m_Edit_A = 0.0;

m_Edit_m = 0.0;

m_Edit_diam = 0.0;

m_Edit_V = 0.0;

//}}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

//Оставшуюся и не приведенную здесь часть кода оставляем без изменения

3.9.3. Связывание кнопки OK с кодом для решения и вывода результатов задачи

В меню ViewвыберемClassWizard, а в панелиMFCClassWizardна вкладке Message Maps выбираем:

Class name: CСupStDlg

Object Ids: IDOK

Messages: BN_CLICKED

Убедимся, что в панели MFC ClassWizard (Рис.13) в окне Member functions имеется функция OnOK и щелкнем по кнопке Edit Code. В ответVC++ откроет файл СupStDlg.cppс приведенным ниже шаблоном функцииOnOK. Внутри шаблона после строки //TODO:Addextravalidationhereнапишем следующий код:

void CCupStDlg::OnOK()

{

// TODO: Add extra validation here

pi=3.141593;

d=m_Edit_d; //присваивает переменойdзначение из окнаm_Edit_d

……………..;

…………….;

…………….;

rho=m_Edit_rho;//присваивает переменойrhoзначение из окнаm_Edit_rho

m_Edit_A=Area();//передает значение функции переменной m_Edit_A

……………………;

…………………….;

m_Edit_diam=DBlank();//передает значение функции переменнойm_Edit_A

UpdateData(FALSE); // функция класса CWnd::UpdateData(False),

// которая передаст значения из окон редактирования диалоговой панели в

//исходные переменные программы и от результирующих функций в окна

//редактирования для отображения значений искомых переменных A, V, m, D.

// CDialog::OnOK();

}

Мы завершили вместе с AppWizardразработку кода для ввода исходных данных, выполнения расчета и вывода результатов расчета на диалоговую панель.

Сохраним результаты нашей работы включив команду File\SaveAll, а затемSaveWorkspaсe.

Соседние файлы в папке МетодУказЛабРабот