Окна в 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);
В качестве аргумента используется адрес, полностью инициализирующий структуру класса окна.
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);
Окна Windows — учимся управлению
В статье Основные элементы окна Windows XP мы познакомились со структурой окна и его устройством. Однако для уверенной работы на компьютере, особенно начинающему пользователю этого совершенно недостаточно.
Давайте рассмотрим этот вопрос подробнее. Нам нужно научиться управлять окнами Windows.
Что под этим подразумевается?
Использование кнопок управления окном, различных меню и панелей окна, управление различными элементами окна с помощью мыши и клавиатуры.
С окнами Windows можно выполнять следующие основные действия:
|
Окна могут находиться в 3 состояниях: нормальном – выглядит как прямоугольная область, занимающая часть экрана, во весь экран – полноэкранный режим и свернутом в кнопку на панели задач.
Теперь все по порядку.
Изменяем размеры окна Windows
В правом верхнем углу находятся три кнопки управления окном. Назначение каждой кнопки легко узнать, подведя к ней курсор мыши, немного задержав его, вы увидите всплывающую подсказку с информацией о функции кнопки.
Кнопка Свернуть — сворачивает окно таким образом, что оно исчезает с экрана и остается в виде прямоугольника на панели задач. Чтобы восстановить окно на экране, достаточно щелкнуть по этому прямоугольнику левой кнопкой мыши или правой, выбрав из контекстного меню соответствующую команду (в Windows 7 – из раздела «Последние» выбрать название нужной папки или файла).
Помимо кнопок управления вы можете воспользоваться системным меню окна. Вызывать его вы можете, кликнув правой кнопкой мыши по строке заголовка или на кнопке этого окна в панели задач (Windows XP) .
Кнопка Закрыть – прекращает, завершает работу программы, закрывает окно папки, файла (также можно закрыть окно с помощью контекстного меню кнопки окна на панели задач или с помощью команды «закрыть» системного меню).
Средняя кнопка имеет двойное назначение Развернуть и Свернуть. Когда окно в обычном режиме, на кнопке изображен прямоугольник, клик по ней развернет окно на весь экран. Изображение на кнопке изменится, теперь это будет двойной прямоугольник. Клик по этой кнопке вернет окно из полноэкранного вида к режиму обычного окна. Не удивляйтесь, если окно какой-либо программы не разворачивается на полный экран, просто разработчики исключили в своей программе такую возможность.
Свернуть и развернуть окно можно также двойным щелчком по строке заголовка, а также используя контекстное меню кнопки окна в панели задач или команды системного меню «развернуть» — «восстановить».
Восстановить – возвращает в прежнее состояние размеры и расположение окна. Команда активна, когда окно в режиме «во весь экран».
Если одновременно у вас открыто много окон, а вам потребовалось что-то посмотреть или найти на рабочем столе, открыть папку, программу, вместо того, чтобы закрывать открытые окна по одному и непродуктивно тратить на это время, можно свернуть их сразу все. В Windows XP для этого предназначена специальная кнопка, расположенная в панели быстрого запуска.
Обратите внимание на то, что панель быстрого запуска может быть отключена. Самый простой способ отобразить ее – кликнуть правой кнопкой мыши на панели задач, в контекстном меню выбрать команду «Панели инструментов», в следующем меню кликнуть на строку «Быстрый запуск».
В Windows 7 кнопка “Свернуть все окна” закреплена на панели задач у правого края экрана.
Все окна можно свернуть и развернуть, используя сочетание клавиш Windows+D
Перемещение окон по экрану
Для перемещения окна в любое место экрана, указатель мыши совместите со строкой заголовка окна, нажмите левую кнопку мыши, удерживая ее в таком положении, переместите окно в другое место.
Окно можно перемещать, используя системное меню окна. Выбрав команду «Переместить» (она доступна только в обычном режиме окна, курсор становится четырехнаправленной стрелкой), клавишами со стрелками (они называются «клавиши перемещения курсора»)
переместите окно нужное место и нажмите клавишу Enter. Отменить режим перемещения можно нажатием клавиши Esc.
Изменение размера окна
С помощью мыши — подведите курсор (указатель) к границе окна или к любому его углу и нажмите левую кнопку мыши. Указатель мыши должен принять вид двусторонней стрелки. Не отпуская, перемещайте мышку (курсор на экране) в нужном направлении, увеличивая или уменьшая размер окна. В момент, когда нужный размер подобран, мышку отпустите. Эту же операцию можно выполнить с помощью клавиатуры. Для этого предназначена команда «Размер» системного меню окна, она активирует режим изменения размеров окна клавишами управления курсором по горизонтали и вертикали. Команда может быть выполнена только, когда окно имеет обычный вид. Закончив перемещение, нажмите клавишу Enter. Отменить действие можно, нажав клавишу Esc.
Но изменить размеры можно не у всех окон, например у окон запросов, некоторых диалоговых окон.
Упорядочиваем расположение окон автоматически
Открытые окна можно расположить на экране каскадом, сверху вниз (в Windows 7 называется «стопкой») и слева направо (в Windows 7 называется «рядом»).«Окна каскадом» одного размера, перекрывают друг друга так, что видны только заголовки, кроме первого окна.
«Окна сверху вниз» и «Окна слева направо» тоже одного размера, но они располагаются на экране рядом друг с другом, разделяя экран на равные части.
«Показать Рабочий стол» сворачивает все открытые окна на панель задач и позволяет увидеть Рабочий стол без открытых окон.
«Отменить…» (последняя команда).
Чтобы упорядочить окна одним из названных способов, в контекстном меню Панели задач нужно выбрать одну из перечисленных команд.
Переключаемся между окнами
Операционная система Windows позиционируется как система многозадачная, в ней вы можете одновременно работать с несколькими окнами, программами, документами, переходя от одного к другому. Любые открытые окна операционная система считает запущенной задачей. Переключение между окнами, это фактически – переход к выполнению другой задачи.
При наличии нескольких открытых окон (запущенных задач) только одно из них может быть активным, то, в котором вы работаете, все другие в этот момент — неактивные.
Чем визуально отличается активное окно:
Основные способы переключения между окнами:
Многочисленные окна открытых папок, программ и документов загромождают рабочий стол, из-за чего за ними становится трудно следить. Поэтому важно научиться быстро переключаться между нужными окнами. Способы перехода от одного окна к другому:
Когда открыто много окон одной программы, кнопки группируются (эта функция должна быть настроена в свойствах панели задач). Для выбора нужного окна кликните на кнопку группы и выберите его в списке.
Если у вас при перемещении окна сначала появляется серый контур, а потом перемещается само окно, выполните следующие действия:
- правой кнопкой мыши вызовите контекстное меню папки «Мой компьютер» и выберите строку Свойства,
Мы познакомились с возможностями изменения размера окна, перемещения окон, сворачивания всех окон и переключениями между окнами в операционной системе Windows.
Возможно, эта информация на блоге КомпАс пригодится вам, вашим знакомым или родственникам, поделитесь ею, нажмите кнопки социальных сетей. Поделитесь в комментариях своим опытом, задавайте вопросы, если у вас возникают проблемы и трудности.