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


Диалог по управлению светом - часть 2


Такое решение выбрано в связи с тем, что мы собираемся перенести рассматриваемый код в приложение, созданное на основе библиотеки шаблонов ATL. Это будет сделано в уроке 9 при разработке элемента ActiveX, а сейчас введите в диалоговый класс новые данные. Они необходимы для эффективной работы с диалогом в немодальном режиме. Важным моментом в таких случаях является использование указателя на оконный класс. С его помощью легко управлять окном прямо из диалога. Мы слегка изменили конструктор и ввели вспомогательный метод GetsiiderNum. Изменения косметического характера вы обнаружите сами:

#pragma once

class COGView; // Упреждающее объявление

class CPropDlg : public CDialog

{

DECLARE_DYNAMIC(CPropDlg)

public:

COGView *m_pView; // Адрес представления

int m_Pos[ll]; // Массив позиций ползунков

CPropDlg(COGView* p) ;

virtual ~CPropDlg();

// Метод для выяснения ID активного ползунка int GetsiiderNum(HWND hwnd, UINT& nID) ;

enum { IDD = IDD_PROP };

protected: virtual void DoDataExchange(CDataExchange* pDX);

DECLARE_MESSAGE_MAP()

};

Откройте файл реализации диалогового класса и с учетом сказанного про адрес окна введите изменение в тело конструктора, который должен приобрести такой вид:

CPropDlg::CPropDlg(COGView* p)

: CDialog(CPropDlg::IDD, p)

{

//====== Запоминаем адрес объекта

m_pView = p;

}

Инициализация диалога

При каждом открытии диалога все его элементы управления должны отражать текущие состояния регулировок (положения движков), которые хранятся в классе представления. Обычно эти установки производят в коде функции OninitDialog. Введите в класс CPropDlg стартовую заготовку этой функции (CPropDlg > Properties > Overrides > OninitDialog > Add) и наполните ее кодами, как показано ниже:

BOOL CPropDlg: rOnlnitDialog (void)

{ CDialog: :OnInitDialog () ;

//====== Заполняем массив текущих параметров света

m_pView->GetLightParams (m _Pos) ;

//====== Массив идентификаторов ползунков

UINT IDs[] =

{

IDC_XPOS, IDC_YPOS, IDC_ZPOS,



Начало  Назад  Вперед