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

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

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

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_PropIdl = 0;
m_PropId2 = 0;
m_Source =0.0;
m_SrcIdl = 0;
m_Srdd2 = 0;
}
CParamDlg::~CParamDlg()
{
}

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

BOOL CParamDlg::OnInitDialog(void) {
CDialog:rOnlnitDialog();
CRect r;
//===== С помощью контекста устройства
//===== узнаем размеры всего экрана CClientDC dc(this);
int w = dc.GetDeviceCaps(HORZRES);
int h = dc.GetDeviceCaps(VERTRES);
//===== Узнаем размеры окна диалога GetWindowRect(&r);
//===== Смещаем его вправо и вниз
r.OffsetRect(w-r.right-10,h-r.bottom-30);
MoveWindow(Sr);
return TRUE;
}
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.