Иллюстрированный самоучитель по Visual Studio.Net




Диалог для исследования решений - часть 3


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

void CParamDlg::OnClickedApply(void) {

//====== Считываем данные из окон

UpdateDataO ;

//====== Заново решаем систему и выводим график

m_jpView->Solve () ; }

void CParamDlg::OnClickedAddsource(void)

{

UpdateData();

//====== Изменяем контейнер m_f (источников поля)

for (int i=m_Src!dl; i <= m_Srdd2; i + + ) {

if (0 <= i && i < m_pView~>m_n)

m_pView->m_f[i] = -m_Source; )

m_pView->Solve0; }

void CParamDlg::OnClickedAddprop(void) { UpdateDataO ;

//====== Изменяем контейнер m_r (свойств среды)

for (int i=m_Prop!dl; i <= m_PropId2; i++) {

if (0 <= i &i i < m_pView->m_n && m_Prop > 0.)

m_pView->ra_r[i] = m_Prop; }

m_pView->Solve(); }

void CParamDlg::OnClickedCancel(void)

{

//====== Закрываем немодальный диалог

m_pView->m_pDlg = 0;

DestroyWindow(); }

Измените коды конструктора класса так, чтобы запоминался обратный указатель на объект оконного класса. Заодно сверьте начало файла ParamDlg.h с тем фрагментом, что приведен ниже:

#include "stdafx.h"

#include "Heat.h"

#include"ParamDlg.h"

IMPLEMENT_DYNAMIC(CParamDlg, CDialog)

CParamDlg::CParamDlg(CChildView* p)

: CDialog(CParamDlg::IDD, p)

{

m_pView = p;

//===== Начальное значение свойств среды

//===== не должно равняться нулю

m_Prop =1.0;

m_Prop!dl = 0;

m_Prop!d2 = 0;

m_Source =0.0;

m_Src!dl = 0;

m_Srdd2 = 0;

}

CParamDlg::~CParamDlg()

{

}

Инициализация диалога, как вы помните, должна производиться в обработчике сообщения WM_INITDIALOG. Здесь я опять попадаю в ловушку. В рамках Visual C++ Studio.Net вы не найдете WM_INITDIALOG в списке доступных сообщений, но вместо этого найдете функцию OnlnitDialog в списке виртуальных функций (overrides). Введите в класс CParamDlg эту функцию.


Содержание  Назад  Вперед