Прикрепление и отделение объектов
ОГЛАВЛЕНИЕ
Прикрепление и отделение объектов MFC (библиотека базовых классов Microsoft) к и от объектов Windows.
Введение
MFC предоставляет набор "объектов-оберток", содержащих встроенные объекты Windows. Например, CWnd оборачивает HWND, CFont оборачивает HFONT, CBrush оборачивает HBRUSH, и так далее. Они сведены в таблицу ниже. Есть значимые взаимодействия между MFC и объектами Windows, которые надо понимать.
Нерешение этих вопросов может вызывать проблемы с произвольными операторами контроля ошибок, ошибками доступа, исчезающими объектами, и другие менее заметные проблемы.
Данная статья объясняет вопросы обращения с интерфейсом MFC/Windows.
Объект MFC |
Объект Windows |
(вариант) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Создание объекта Windows в два шага
Создание большинства объектов происходит в два шага. Первый шаг – создать объект C++, являющийся "оберткой" вокруг объекта Windows. Второй шаг – создать реальный объект Windows. Некоторые параметризованные конструкторы делают оба этих шага сразу. Например,
CPen pen;
Создает объект MFC CPen, но не связывает HPEN с ним. Но конструктор
CPen pen(PS_SOLID, 0, RGB(255, 0, 0));
создает объект MFC CPen, затем создает нижележащий объект Windows HPEN и прикрепляет этот объект к CPen.
Можно сделать это неявно с помощью метода Create(создать) (который иногда необоснованно переименуется, потому что разработчики MFC не были экспертами C++). Например, для создания пера можно сделать
CPen pen;
pen.CreatePen(PS_SOLID, 0, RGB(255, 0, 0));
(MFC имеет CreatePen и CreatePenIndirect, что глупо, потому что нет метода Create в CPen или в суперклассе CGDIObject).