Страница 201 из 238
CWnd
Класс
CWnd обеспечивает основные функциональные возможности всех классов окон в библиотеке MFC. Объект класса
CWnd не является окном Windows, но тесно с ним связан. Если объект класса
CWnd является полноценным объектом класса, создается своим конструктором и уничтожается своим деструктором, то окно Windows является внутренней структурой данных Windows, создаваемой функцией
CWnd::Create и уничтожаемой виртуальным деструктором класса
CWnd. Функция
CWnd::DestroyWindow уничтожает окно Windows, не уничтожая объект класса
CWnd. Класс
CWnd и механизм карты сообщения скрывают от пользователя функцию
WndProc. Поступающие в объект данного класса сообщения Windows автоматически направлены через карту сообщения к соответствующим функциям обработки сообщений класса
CWnd. Чтобы обработать в пользовательском классе сообщение, поступающее от некоторого элемента управления, пользователю необходимо включить в свой класс функцию обработки данного сообщения. Класс
CWnd позволяет пользователю создать дочернее окно Windows для своего приложения. Для этого достаточно создать пользовательский класс, производный от класса
CWnd, а затем добавить в него переменные для хранения данных, характерных для данного окна приложения. После этого необходимо включить в карту сообщений макросы для обработки приходящих в класс сообщений и написать тела функций обработки сообщений, объявленных в карте сообщений. Дочернее окно создается в два этапа. Сначала вызывается конструктор класса
CWnd, создающий объект данного класса, а затем вызывается функция
Create, создающая дочернее окно и присоединяющая его к объекту класса
CWnd. Когда пользователь закрывает дочернее окно, происходит уничтожение объекта класса
CWnd или вызывается функция
DestroyWindow, уничтожающая окно и связанные с ним структуры данных. В библиотеке MFC собрано множество классов, производных от
CWnd. Многие из этих классов, включая
CFrameWnd,
CMDIFrameWnd,
CMDIChildWnd,
CView и
CDialog, сами используются в качестве базовых классов для различных пользовательских классов. Классы элементов управления, являющиеся производными от класса
CWnd, такие, как класс
CButton, могут использоваться непосредственно или могут использоваться в качестве базовых для пользовательских классов. Описание данного класса содержится в файле заголовка afxwin.h.