Визуальное программирование и MFC



         

Объекты класса CWnd и Windows-окна


Рассмотрим взаимоотношения объектов класса CWnd с Windows-окнами. Хотя объекты класса CWnd и производных от него классов (оконные объекты) не тождественны Windows-окнам, они связаны настолько тесно, что такое отождествление вполне оправдано. Windows-окно - объект операционной системы Windows - это внутренняя структура данных операционной системы, с которой связано изображение на экране в виде окна-прямоугольника со специальными элементами и областями. Эта структура обеспечивает управление окном на экране и реакцию на воздействие пользователя на окно. В смысле объектно-ориентированного программирования она во многом подобна классу и имеет метод - функцию окна. Однако эта структура не является, конечно же, структурой какого-либо языка программирования, поэтому Windows-окно не является объектом в смысле языка C++. Дескриптор (handle) Windows-окна просто идентифицирует его при вызове функций API, предназначенных для работы с Windows-окнами.

Оконный объект - это объект в смысле языка C++, который служит для работы с Windows-окном. Его переменная m_hWnd задает определитель (handle) Windows-окна, прикрепленного (attached) к данному оконному объекту. Создание оконного объекта состоит из двух этапов: создания самого объекта и создания и прикрепления Windows-окна к оконному объекту или прикрепление к оконному объекту уже существующего Windows-окна. Оконный объект может использоваться приложением для управления экранным образом (окном на экране) прикрепленного Windows-окна. При этом само Windows-окно становится "прозрачным", т.е. не фигурирует при вызове соответствующих методов.

Оконный объект использует большое количество функций API, предназначенных для работы с окнами. Например, метод MoveWindow передвигает и изменяет размер окна на экране:

wnd.MoveWindow(x, y, width, height, rep);

При вызове этого метода его реализация на самом деле использует API-функцию

BOOL MoveWindow( HWND hWnd, // дескриптор Windows-окна int X, // позиция по горизонтали int Y, // позиция по вертикали int nWidth, // ширина int nHeight, // высота BOOL bRepaint); // признак перерисовки




Содержание  Назад  Вперед