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

Диалог для исследования решений

Вручную введите изменения в файл с объявлением класса, так чтобы он стал:

ftpragma once
class CParamDlg: public CDialog {
//===== Будем общаться с окном
friend class CChildView;
DECLARE_DYNAMIC(CParamDlg)
public:
//===== Будем помнить его адрес
CChildView *m_pView;
//===== В конструкторе запросим его адрес
CParamDlg(CChildView* р);
virtual ~CParamDlg ();
// Dialog Data
enum { IDD = IDD_PARAM);
protected:
virtual void DoDataExchange(CDataExchange* pDX);
DECLARE_MESSAGE_MAP());

Для всех четырех кнопок на форме диалога создайте обработчики уведомлений, или, используя терминологию Microsoft, Control Event типа BN_CLICKED. Вы помните, что это делается с помощью небольшой кнопки Control Event, которая расположена на панели инструментов окна Properties. В это окно надо входить в тот момент, когда фокус находится на соответствующей кнопке. Во всяком случае, именно так это работает в бета-версии Studio .NET.

Для обмена данными с шестью окнами редактирования (IDC_SOL)RCE, IDC_SOURCE1, IDC_SOURCE2, IDC_PROP, IDC_PROP1, IDC_PROP2) создайте с помощью мастера Add Member Variable Wizard шесть переменных:

//==== Интенсивность источника поля
double m_Source;
// Индекс ячейки сетки, где расположено начало источника
int m_Src!dl;
// Индекс ячейки сетки, где расположен конец источника
int m_Srdd2;
//==== Значение физического свойства ячейки сетки
double m_Prop;
// Индексы начала и конца области со свойством
m_Prop int m_PropIdl;
int m_PropId2;

В результате этих действий в классе CParamDlg кроме указанных переменных должны появиться шесть вызовов функции обмена данными DDX_Text, которые мастер размещает внутри функции CParamDlg::DoDataExchange. Вручную добавьте в DoDataExchange еще семь вызовов функции DDX_Text для обмена данными с переменными, которые расположены не в диалоговом, а в оконном классе (cchildview). После этого функция должна приобрести вид:

void CParamDlg::DoDataExchange(CDataExchange* pDX) {
DDX_Text (pDX, IDC_PROP2, m_Prop!d2);
DDXJText(pDX, IDC_PROP1, m_Prop!dl);
DDX_Text(pDX, IDC_PROP, m_Prop);
DDX_Text(pDX, IDC_SOURCE2, m_Srdd2);
DDX_Text(pDX, IDC_SOURCE1, ra_SrcIdl);
DDX_Text(pDX, IDC_SOURCE, m_Source);
//===== Обмен с переменными оконного класса
DDX_Text(pDX, IDC_NODES,m_pView › m__n);
DDX_Text(pDX, IDC_DIST, m_pView › m_L);
DDX_Text(pDX, IDC_DECR, m_pView › m_k);
DDX_Text(pDX, IDC_LEFTG, m_pView › m_g0);
DDX_Text(pDX, IDC_LEFTD, ra_pView › m_d0);
DDX_Text(pDX, IDC_RIGHTG, mj?View › m_gn);
DDX_Text(pDX, IDC_RIGHTD, m_pView › m_dn);
CDialog::DoDataExchange(pDX);
}

При нажатии на одну из кнопок Add в соответствующем контейнере параметров системы (m_f или m_r) должны произойти замены значений по индексам, определяемым диапазоном (m_Srddl, m_Srdd2) или (m_PropIdl, m_PropId2). В первом случае вы вводите новые источники поля, а во втором – изменяете свойства среды.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.