Диалог для исследования решений
Вручную введите изменения в файл с объявлением класса, так чтобы он стал:
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). В первом случае вы вводите новые источники поля, а во втором – изменяете свойства среды.