Диалог по управлению светом
Диалоговый класс
Для управления диалогом следует создать новый класс. Для этого можно воспользоваться контекстным меню, вызванным над формой диалога.
- Выберите в контекстном меню команду Add Class.
- В левом окне диалога Add Class раскройте дерево Visual C++, сделайте выбор MFC › MFC Class и нажмите кнопку Open.
- В окне мастера MFC Class Wizard задайте имя класса CPropDlg, в качестве базового класса выберите CDialog. При этом станет доступным поле Dialog ID.
- В это поле введите или выберите из выпадающего списка идентификатор шаблона диалога IDD_PROP и нажмите кнопку Finish.
Просмотрите объявление класса CPropDlg, которое должно появиться в новом окне PropDlg.h. Как видите, мастер сделал заготовку функции DoDataExchange для обмена данными с элементами управления на форме диалога. Однако она нам не понадобится, так как обмен данными будет производиться в другом стиле, характерном для приложений не MFC-происхождения. Такое решение выбрано в связи с тем, что мы собираемся перенести рассматриваемый код в приложение, созданное на основе библиотеки шаблонов 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) { <strong>//======</strong> Запоминаем адрес объекта m_pView = p; }