Что такое оконный класс windows

Что такое оконный класс windows

Прикладная программа, когда создается окно, должна предоставить следующую информацию:

В разделах ниже описываются эти атрибуты.

Каждое окно принадлежит определенному классу окна. Прикладная программа должна зарегистрировать класс окна перед созданием любого окна этого класса. Класс окна (window class) определяет большинство аспектов внешнего вида и поведения. Главный компонент класса окна — это оконная процедура (window procedure), функция которой получать и обрабатывать все вводимые данные и запросы, посланные окну. Окна предоставляют входные данные и запросы в форме сообщений (messages). Для большей информации о классах окна, оконных процедурах или сообщениях смотрите Классы окна, Оконные процедуры или Сообщения и Очереди сообщений.

Окно может иметь имя. Имя окна (window name) (называемое также оконный текст (window text)) — это текстовая строка, которая идентифицирует окно для пользователя. Главное окно, диалоговое окно или окно сообщения, если представлено, обычно показывает свое имя окна в своей строке заголовка. Для элемента управления внешний вид имени окна зависит от класса элементов управления. Кнопка, поле редактирования или статический элемент управления отображают свое оконное имя внутри прямоугольника, который занимает элемент управлением. Окно со списком, комбинированное окно или статический элемент управления не показывают имя своего окна.

Программа использует функцию SetWindowText, чтобы изменить имя окна после того, как окно создано. Она использует функции GetWindowTextLength и GetWindowText, чтобы сделать выборку текущего текста имени окна.

Каждое окно имеет один или несколько стилей окна. Стиль окна (window style) — это име-нованная константа, которая определяет аспекты внешнего вида и поведения окна, которые не определяет класс окна. Например, класс SCROLLBAR создает линейку прокрутки, а стили SBS_HORZ и SBS_VERT определяют создание или горизонтальной или вертикальной линейки прокрутки. Несколько стилей окна применяют все окна, но большинство их применяют окна конкретного класса окна. Окна и, до некоторой степени, оконная процедура класса, интерпретируют стили.

Родительское или самостоятельное окно

Окно может иметь родительское окно. Окно, которое имеет родительское окно, называется дочерним окном (child window). Родительское окно (parent window) предоставляет систему координат, которая используется для позиционирования дочернего окна. Наличие родительского окна воздействует на аспекты внешнего вида окна; например, дочернее окно обрезается так, что-бы ни одна часть дочернего окна не могла появиться вне рамок своего родительского окна. Окно, у которого нет родительского окна или родитель которого самое главное окно, называется окном верхнего уровня (top-level window). Прикладная программа использует функцию EnumWindows, чтобы получить дескриптор каждого из своих окон верхнего уровня. Функция EnumWindows, в свою очередь, передает дескриптор каждого окна верхнего уровня в определенную программой функцию повторного вызова EnumWindowsProc.

Окно может иметь или принадлежать другому окну. Находящееся в собственности окно всегда появляется перед окном его владельца, скрывается, когда окно его владельца сворачивается и разрушается, когда окно его владельца разрушается.

Расположение, размер и позиция в Z-последовательности

Каждое окно имеет расположение, размер и позицию в Z-последовательности. Расположение — это координаты верхнего левого угла окна, относительно верхнего левого угла экрана или, в случае дочернего окна, верхнего левого угла рабочей области родителя. Размер окна — это его ширина и высота, измеряемая в пикселях. Позиция окна в Z-последовательности (Z order) — это позиция окна в стеке перекрывающихся окон. Для получения дополнительной информации, см «1.6 Z-последовательность (Z Order)».

Идентификатор Дочернего окна или дескриптор Меню

Дочернее окно может иметь идентификатор дочернего окна (child-window identifier), уникальное значение определенное программой, связанное с дочерним окном. Идентификаторы дочернего окна особенно полезны в прикладных программах, которые создают многочисленные дочерние окна. При создании дочернего окна, прикладная программа определяет идентификатор дочернего окна. После создания окна, прикладная программа может изменять идентификатор окна, используя функцию SetWindowLong, или может отыскать идентификатор, используя функцию GetWindowLong.

Каждое окно, за исключением дочернего окна, может иметь меню. Прикладная программа может включать в себя меню, путем предоставления дескриптора меню, или при регистрации класса окна, или при создании окна.

Каждая базирующаяся на Win32 прикладная программа имеет дескриптор связанного с ней экземпляра. Windows обеспечивает программу дескриптором экземпляра, когда она стартует. Поскольку он может запускать многочисленные копии одной и той же программы, Windows использует дескрипторы экземпляра внутри себя, чтобы отличить один экземпляр прикладной программы из другого. Прикладная программа должна определить дескриптор экземпляра во многих различных окнах, включая и те, которые создаются окнами.

Читайте также:  Что такое linux control center

Каждое окно может иметь определяемые программой данные создания, связанные с ней. Когда создано первое окно, Windows передает указатель на данные в оконную процедуру создаваемого окна. Оконная процедура использует эти данные, чтобы инициализировать определяемые программой переменные.

Окна в Windows. Функции окна. Класс окна.

Windows не является объектно-ориентированной ОС. Но она придерживается объектно-

ориентированного подхода. Фраза стала нелогичной с 1993. Появился FrameWork – объектно-ориентированная надстройка.

Окна в Windows определяются как структуры, содержащие поля данных. Совокупности методов,

управляющих полями, реализованы в виде одной функции, которая называется функцией окна.

Функция окна – функция языка Си, которая определяется для одного окна, либо для целой группы окон. При возникновении событий, имеющих отношения к окну, функция формирует сообщения, описывающие события и направляет его в нужную функцию окна. Функция окна анализирует сообщения и выполняет соответствующие действия. Поэтому основной задачей функции окна является обработка сообщений, распределяемых окну ОС.

Т.о. единственная для каждого окна функция окна регулирует все методы окна как объекта.

В Windows предусмотрен механизм наследования методов, которые реализуются с использованием класса окна. Для каждого класса определяется функция окна. При создании окна необходимо указать, какому классу оно будет принадлежать и соответственно какую функцию окна будет использовать для обработки событий.

Приложения могут создавать собственные классы окна, либо использовать стандартные, определенные Windows классы окна. Любое создаваемое окно может наследовать свойство уже созданных ранее окон. Для большинства стандартных элементов управления, таких как кнопки, меню, списки и т.ж. уже определены классы окна и все необходимые методы.

1) Описание функции окна: функция окна не стандартна, ее нельзя напрямую вызвать из функции WinMain или любой другой. Вызов функции окна осуществляет ОС.

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)

return DefWindowProc (hWnd, msg, wp, lp);

Тип возвращаемого значения указывает, что функция окна это функция обратного вызова. Имя

функции окна может быть произвольным.

1 параметр – идентификатор окна, для которого предназначено сообщение. На базе одного класса может быть создано несколько экземпляров окон, каждый из которых будет иметь собственный идентификатор. Для обработки сообщений, поступающих в окна, созданных на базе одного класса, используется общая функция окна. Функция окна может определять экземпляр окна, для которого предназначено сообщение, анализируя свой первый параметр.

3 следующих параметра описывают передаваемые сообщения. Параметр msg передает код сообщения. Следующий параметр описывает дополнительную информацию передаваемого функцией окна вместе с сообщением. Формат этой информации зависит от кода сообщения для обработки сообщений, которые не обрабатываются функцией окна, называется функцией программного интерфейса Windows с именем DefWindowsProc.

2) Описание класса окна.

WNDCLASS typedef struct tagWNDCLASS

UINTstyle;

WNDPROClpfnWndProc;

intcbClsExtra;

intcbWndExtra;

HINSTANCEhInstance;

HICONhIcon;

HCURSORhCursor;

HBRUSHhbrBackground;

LPCTSTRlpszMenuName;

LPCTSTRlpszClassName;

1 – определяет стиль класса, задается в виде именованных констант с префиксами.

CS_VREDRAW – окно должно быть перерисовано с изменением масштаба, горизонтального размера.

Стиль задает реакцию окна на некоторые события и характеристики отображения окна.

2 – содержит адрес функции окна, которая будет выполнять обработку сообщений, поступающих во все окна, созданные на базе данного класса.

3 – используется для выделения дополнительной памяти, общей и доступной для всех окон, созданных на базе данного класса.

4 – позволяет увеличить размер области памяти для хранения информации (общей и доступной), имеющей отношение к экземпляру окна.

5 – содержит идентификатор приложения, создающий класс окна.

6 – содержит идентификатор пиктограммы, в которую превращается окно при инициализации. Пиктограмма может быть загружена с помощью LoadIcon(HINSTANCE, LPCSTR) – 1 параметр идентификатор приложения, 2 – идентификатор ресурса.

7 – задает вид курсора мыши, при его прохождении над окном, LoadCursor(..).

8 – определяет кисть для закрашивания поля окна, в качестве кисти используется либо цвет, либо пиктограмма.

9 – определяет меню главного окна приложения. Если меню нет, то используется NULL.

3) Регистрация класса окна. Для создания окна на основе разработанного класса его необходимо предварительно зарегистрировать с помощью:

ATOM WINAPI RegisterClass(const WNDCLASS *wndclass);

В качестве аргумента используется адрес, полностью инициализирующий структуру класса окна.

Читайте также:  Epson printers mac os

ATOM – тип идентификатора текстовых строк, которые храняться в системной памяти.

4) Создание главного окна приложения.

HWND WINAPI CreateWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, // int y, // лев верх угол int nWidth, // ширина int nHeight, //высота HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);

Отображение окна на экране:

ShowWindow(HWND hwnd, in CmdShow);

Обработка сообщений. Приложение с обработкой сообщений.

Основная работа, которую выполняет приложение, заключается в обслуживании собственных окон. Приложение в цикле опрашивает в свою очередь сообщения. Обнаружив сообщения, приложение распределяет их в нужную часть окна, который выполняет их обработку.

Сообщение представляет собой следующую структуру:

Распределение сообщений между различными приложениями основано на понятии word-атрибут, который в любой момент может относиться к одному окну.

Сообщения от клавиатуры распределяются сначала в очередь расположения сообщений, создавшее окно, а затем в функцию окна, владеющую клавишей ввода. Изменение фокуса ввода происходит при помощи комбинации клавиш клавиатуры, либо мышью.

Сообщения от драйвера мыши всегда передаются в функцию окна, над которой находится курсор мыши.

Цикл обработки сообщений. После отображения окна функция WinMain запускает цикл обработки сообщений.

while (GetMessage(&msg, 0, 0, 0))

Функция GetMessage выбирает сообщения из функции приложения.

1 параметр – указатель на структуру типа MSG. В нее записывается выбранное из очереди сообщение.

2 параметр – идентификатор окна, для которого необходимо выбрать сообщения. Для значения 0 будут выбираться сообщения для всех окон приложения.

3 и 4 параметры – определяют диапазон сообщений. При 0 выбираются все сообщения. Если из очереди выбираются сообщения с кодом WM_QUIT, функция возвращает сообщение со значением FALSE, что приводит к окончанию цикла выборки сообщений.

Функция DispatchMessage используется для распределения сообщений в функцию окна, для которой она выполняется.

Приложение определяет один класс окна и на его основе создает главное окно приложения. Функция окна обрабатывает сообщения от главной клавиши мыши. В ответ на сообщения функция окна выводит диалоговую панель.

#include // для работы с динамической памятью

LRESULT CALLBACK WndProc(HWND, HINT, WPARAM, LPARAM);

Операционная система Microsoft Windows 3.1 для программиста

1.3. Окно и функция окна

В этом разделе вы узнаете, что операционная система Windows является объектно-ориентированной средой.

Как это следует из названия операционной системы, основным объектом в Windows является окно. И это действительно так. Однако давайте уточним, что понимается под окном.

Окна Windows

С точки зрения пользователя Windows окном является прямоугольная область экрана, в которой приложение может что-либо рисовать или писать, а также выполнять все операции взаимодействия с пользователем. Например, на рис. 1.8 показано главное окно приложения Media Player, которое в данном случае используется для проигрывания звукового компакт-диска.

Рис. 1.8. Главное окно приложения Media Player

С точки зрения программиста то, что изображено на рис. 1.8, является совокупностью большого количества отдельных объектов, которые созданы приложением Media Player и самой операционной системой Windows. Для каждого объекта в приложении имеются свои данные и методы. Все эти объекты обычно называются окнами.

Такие объекты, как пиктограмма системного меню, кнопка минимизации, отдельные фрагменты толстой рамки, предназначенной для изменения размера основного окна, заголовок окна с надписью «Media Player — CD Audio (stopped)», а также полоса меню, — не что иное, как различные окна, создаваемые самой операционной системой Windows. Приложение не принимает никакого участия в формировании этих окон, оно просто указывает Windows, какие из перечисленных выше элементов необходимо создать.

Иное дело область, располагающаяся ниже полосы меню и ограниченная рамкой. Эта область представляет собой место, в котором приложение может рисовать и создавать новые окна.

Кнопки управления проигрывателем компакт-дисков, в качестве которого используется дисковод CD-ROM, представляют собой окна небольшого размера, создаваемые приложением. Приложение само формирует рисунок внутри такого окна. Ползунок и кнопки, расположенные справа от ползунка, также сформированы приложением из нескольких окон.

Обычно приложение создает одно, главное окно большого размера, которое ограничено сверху полосой меню (если есть меню) или заголовком и рамкой изменения размера с других сторон. Можно создать такое окно, которое не имеет ни рамки, ни заголовка, ни меню, ни других стандартных элементов, таких как пиктограмма системного меню или кнопки минимизации или максимизации размеров главного окна.

Внутри главного окна приложение может рисовать геометрические фигуры и графические изображения, писать текст или создавать любое количество окон меньшего размера.

Читайте также:  Звук трещит windows 10

Таким образом, любое приложение Windows можно рассматривать как совокупность окон, внутри которых можно что-либо рисовать или писать. Для каждого окна в приложении определены данные и методы, предназначенные для работы с этими данными (в частности, для рисования в окне).

Окна Windows как объекты

Все окна, формируемые приложением или операционной системой Windows для приложения, можно рассматривать как объекты, над которыми можно выполнять различные операции.

Проведем параллель с языком C++. В терминах языка C++ объект называется классом, который представляет из себя совокупность данных и методов, с помощью которых эти данные должны обрабатываться. Например, вы можете определить класс как совокупность простых переменных и структур, а также функций-членов (нам больше нравится название «функция-метод» или просто «метод»), выполняющих обработку данных, записанных в этих переменных или структурах.

В операционной системе Windows объектами, с которыми можно что-либо делать, являются окна — те самые окна, из которых формируется «внешний вид» приложения.

Для каждого такого окна приложение должно создать свои данные и свой набор методов, то есть функций, реагирующих на те или иные действия, которые выполняет над окнами оператор или операционная система.

Что это за действия?

Например, вы можете щелкнуть левой (или правой) кнопкой мыши в то время, когда курсор мыши находится над окном. Это событие, на которое окно может реагировать, а может и не реагировать. Вы можете щелкнуть мышью по любому окну, принадлежащему приложению, и каждое окно должно реагировать на это по-своему.

В Windows существует механизм, позволяющий задать для каждого окна данные и набор методов обработки событий, имеющих отношение к любому окну, созданному приложением.

Этот механизм основан на использовании так называемой функции окна (window function) и сообщений.

Функция окна

Функция окна — это обыкновенная (почти) функция языка С, которая определяется для одного окна или группы окон. Каждый раз, когда происходит какое-либо событие, имеющее отношение к окну (например, щелчок мышью в окне), операционная система Windows вызывает соответствующую функцию окна и передает ей параметры, описывающие событие. Функция окна анализирует эти параметры и выполняет соответствующие действия.

При возникновении события операционная система Windows формирует сообщение, описывающее событие, и затем направляет его в нужную функцию окна. В качестве параметров, передаваемых функции окна, используются отдельные компоненты сообщения, соответствующего событию (или, иными словами, созданному в результате появления события). Поэтому основная задача функции окна — обработка сообщений, распределяемых окну операционной системой Windows.

Можно считать, что единственная для каждого окна функция окна реализует все методы окна как объекта. В языке программирования C++, напротив, каждый метод объекта (класса) реализуется отдельной функцией, называемой обычно функцией-членом. Для реализации всех методов функция окна анализирует код сообщения, однозначно идентифицирующий событие и, следовательно, определяющий нужный метод.

В объектно-ориентированных языках программирования используется такое понятие, как наследование. Объекты могут наследовать методы других объектов. В операционной системе Windows также предусмотрен механизм наследования методов. Он реализуется с использованием так называемых классов окна.

Для каждого класса окна определяется функция окна. При создании окна необходимо указать, к какому классу оно будет принадлежать и, соответственно, какую функцию окна будет использовать для обработки сообщений. Приложения могут создавать собственные классы окна, определяя свои функции окна (и следовательно, свои методы), либо использовать стандартные, определенные в Windows классы окна.

Приведем пример. Пусть, например, нам надо создать окно, выполняющее функцию кнопки. Мы можем создать собственный класс окна и для него определить собственную функцию окна. Эта функция будет обрабатывать сообщения и при необходимости изображать в окне нажатую или отжатую кнопку, а также выполнять другие действия. Однако в Windows уже определен класс окна, соответствующий кнопкам. Если вы воспользуетесь этим классом, вам не придется создавать свою функцию окна, так как будет использоваться функция, уже имеющаяся в Windows и выполняющая все необходимые действия.

Любое создаваемое вами окно может наследовать свойства уже созданных ранее окон, добавляя свои или переопределяя уже имеющиеся в базовом классе методы. В этом и заключается механизм наследования Windows.

Использование механизма наследования значительно упрощает процесс создания приложений, так как для большинства стандартных органов управления, таких, как кнопки, меню, полосы просмотра и т. п., в операционной системе Windows уже определены классы окон и все необходимые методы.

Оцените статью