Образец SUBEDIT: создание суперкласса для стандартного элемента управления Windows
Обновлен: Ноябрь 2007
В образце SUBEDIT показано, как создать элемент управления ATL, который является суперклассом для стандартного элемента управления Windows "Поле ввода".
Образец атрибутов SUBEDIT представляет версию данного образца с поддержкой атрибутов.
Примечание о безопасности. |
---|
Этот образец кода служит для демонстрации основных принципов и не предназначен для использования в приложениях или на веб-узлах, поскольку не может считаться примером наиболее безопасного кода. Корпорация Майкрософт не несет ответственности за случайные или косвенные убытки в случае использования образца кода не по назначению. |
Чтобы получить образцы и инструкции по их установке, выполните следующие действия.
В меню Справка среды Visual Studio выберите пункт Примеры.
Дополнительные сведения см. в разделе Поиск файлов примеров.
Самая последняя версия и полный список образцов доступны в Интернете на странице образцов Visual Studio 2008.
Кроме того, образцы находятся на жестком диске компьютера. По умолчанию образцы кода и файл Readme копируются в папку, находящуюся в папке \Program Files\Visual Studio 9.0\Samples\. Все образцы кода для экспресс-выпусков Visual Studio находятся в Интернете.
Построение и запуск образца
Построение и запуск этого образца
Откройте файл решения SubEdit.sln.
В меню Построение выберите команду Построить.
После построения образца откройте файл AtlEdit.htm в веб-обозревателе и проверьте работу элемента управления.
Этот элемент управления можно проверить в тестовом контейнере элементов управления ActiveX, открыв класс ATLEdit. Дополнительные сведения о доступе к тестовому контейнеру и его применении для тестирования элементов управления см. в разделеТестирование свойств и событий в тестовом контейнере.
Создание суперкласса для элемента управления Windows
Библиотека ATL дает возможность создания элемента управления, который служит суперклассом для стандартного элемента управления Windows. Суперкласс позволяет создать класс окна, который основан на существующем классе, но используют другую процедуру окна. Затем на базе этого нового класса создается окно. Во время создания суперкласса для элемента управления сообщения сначала обрабатываются схемой сообщений ATL, а затем отправляются в исходную процедуру окна элемента управления. Это позволяет изменять правила работы по умолчанию для стандартных элементов управления Windows.
Если для создания элемента управления ActiveX применяется мастер элементов управления ATL, можно выбрать добавление элемента, основанного на стандартном классе окна. В этом случае мастер добавляет в класс элемента управления ActiveX переменную типа CContainedWindow. Затем метод CContainedWindow::Create создает окно, которое является суперклассом для указанного класса окна. Это окно с помощью CContainedWindow::WindowProc направляет сообщения в схему сообщений. Если для сообщения требуется дополнительная обработка, оно отправляется в исходную процедуру окна для класса окна.
Изучение кода образца SUBEDIT (AtlEdit.h)
Конструктор для класса CAtlEdit устанавливает переменную m_bWindowOnly в значение TRUE. Это гарантирует, что элемент управления не будет активирован без окна.
Переменная m_EditCtrl является членом класса CContainedWindow и инициализируется конструктором CAtlEdit. Конструктор CContainedWindow принимает три параметра: имя класса окна, для которого создается суперкласс (в данном случае — "EDIT"), указатель на класс CAtlEdit, который содержит схему сообщений, и идентификатор схемы сообщений, которая будет обрабатывать сообщения m_EditCtrl. По умолчанию переменная m_EditCtrl использует альтернативную схему сообщений, которая объявляется в макросе ALT_MSG_MAP.
В схеме сообщений по умолчанию объявляются имена функций-обработчиков для сообщений WM_CREATE и WM_CTLCOLOREDIT, которые отправляются в элемент управления CAtlEdit. Обработчик OnCreate вызывает метод CContainedWindow::Create, чтобы создать окно m_EditCtrl. Обработчик OnCtlColorEdit задает новый цвет фона и цвет текста для m_EditCtrl.
В альтернативной схеме сообщений объявляется функция-обработчик для сообщений WM_CHAR, отправляемых в элемент m_EditCtrl. Этот обработчик принимает только отдельные буквы и не принимает специальные символы и цифры, а затем передает сообщение WM_CHAR в исходную процедуру окна, определенную в классе Windows Edit.
Ключевые слова
В этом образце используются следующие ключевые слова:
CComCoClass; CComControl; CComModule::GetClassObject; CComModule::GetLockCount; CComModule::Init; CComModule::RegisterServer; CComModule::Term; CComModule::UnregisterServer; CComObjectRoot; CContainedWindow::DefWindowProc; DisableThreadLibraryCalls; GetStockObject; GetWindowRect; IDataObjectImpl; IDispatchImpl; IOleControlImpl; IOleInPlaceActiveObjectImpl; IOleInPlaceObjectWindowlessImpl; IOleInPlaceObjectWindowlessImpl::SetObjectRects; IOleObjectImpl; IPersistStorageImpl; IPersistStreamInitImpl; IProvideClassInfo2Impl; IQuickActivateImpl; ISpecifyPropertyPagesImpl; IViewObjectExImpl; SetBkColor; SetTextColor; SetWindowPos