Поделиться через


Сведения о Windows

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

Обзор содержит следующие разделы.

Окно рабочего стола

При запуске системы он автоматически создает окно рабочего стола. Окно рабочего стола — это системное окно, которое рисует фон экрана и служит основой для всех окон, отображаемых всеми приложениями.

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

Функция GetDesktopWindow возвращает дескриптор рабочего стола.

Приложение конфигурации системы, например элемент панели управления, изменяет фон рабочего стола с помощью функции SystemParametersInfo с параметром wAction, установленным в SPI_SETDESKWALLPAPER, и параметром lpvParam, указывающим имя файла растрового изображения. SystemParametersInfo затем загружает растровое изображение из указанного файла, использует растровое изображение для рисования фона экрана и вводит новое имя файла в реестре.

Окна приложений

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

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

Окно приложения включает такие элементы, как заголовок, строка меню, меню окна (прежнее название — системное меню), кнопка сворачивания, кнопка "Развернуть", кнопка "Восстановить", кнопку закрытия, границу размера, область клиента, горизонтальную полосу прокрутки и вертикальную полосу прокрутки. Главное окно приложения обычно включает все эти компоненты. На следующем рисунке показаны эти компоненты в обычном главном окне.

типичное окно

Клиентская область

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

Неклиентная область

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

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

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

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

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

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

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

Элементы управления и диалоговые окна

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

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

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

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

Атрибуты окна

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

Эти атрибуты окна описаны в следующих разделах.

Имя класса

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

Имя окна

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

Чтобы изменить имя окна после создания окна, используйте функцию SetWindowText. Эта функция использует функции GetWindowTextLength и Функции GetWindowText для получения текущей строки имени окна из окна.

Стиль окна

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

Система и, в некоторой степени, процедура окна для класса интерпретирует стили окон.

Некоторые стили окон применяются ко всем окнам, но большинство применяются к окнам определенных классов окон. Общие стили окон представлены константами, начинающимися с префикса WS_; Их можно объединить с оператором OR для формирования различных типов окон, включая основные окна, диалоговые окна и дочерние окна. Стили окна для определенных классов определяют внешний вид и поведение окон, принадлежащих к предопределенным классам элементов управления. Например, класс SCROLLBAR задает элемент управления полосой прокрутки, но стили SBS_HORZ и SBS_VERT определяют, создается ли элемент управления горизонтальной или вертикальной полосы прокрутки.

Список стилей, которые можно использовать в окнах, см. в следующих разделах:

Расширенный стиль окна

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

Дополнительные сведения см. в разделе CreateWindowEx.

Позиция

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

Функция WindowFromPoint получает дескриптор окна, занимающего определенную точку на экране. Аналогичным образом функции ChildWindowFromPoint и ChildWindowFromPointEx извлекают дескриптор дочернего окна, занимающего определенную точку в клиентской области родительского окна. Хотя ChildWindowFromPointEx может игнорировать невидимые, отключенные и прозрачные дочерние окна, ChildWindowFromPoint этого сделать не может.

Размер

Размер окна (ширина и высота) определяется в пикселях. Окно может иметь нулевую ширину или высоту. Если приложение задает ширину окна и высоту нулю, система задает размер минимального размера окна по умолчанию. Чтобы обнаружить минимальный размер окна по умолчанию, приложение использует функцию GetSystemMetrics с флагами SM_CXMIN и SM_CYMIN.

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

Приложение может настроить размер окна так, чтобы оно было чрезвычайно большим; однако оно не должно изменять размер окна так, чтобы оно превышало размер экрана. Прежде чем задать размер окна, приложение должно проверить ширину и высоту экрана с помощью GetSystemMetrics с флагами SM_CXSCREEN и SM_CYSCREEN.

Дескриптор окна "Родитель" или "Владелец"

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

Окно, которое не имеет главного окна или у которого главным окном является окно рабочего стола, называется окном верхнего уровня. Приложение может использовать функцию EnumWindows для получения дескриптора каждого окна верхнего уровня на экране. EnumWindows передает дескриптор каждому окну верхнего уровня, в свою очередь, в функцию обратного вызова, определяемую приложением, EnumWindowsProc.

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

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

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

Дескриптор экземпляра приложения

У каждого приложения есть дескриптор экземпляра, связанный с ним. Система предоставляет приложению дескриптор экземпляра при его запуске. Поскольку система может запускать несколько копий одного и того же приложения, она использует идентификаторы экземпляров внутри системы для отличия одного экземпляра приложения от другого. Приложение должно указать дескриптор экземпляра во многих разных окнах, включая те, которые создают окна.

Дата создания

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

Дескриптор окна

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

Приложение может использовать функцию FindWindow, чтобы определить, существует ли окно с указанным именем класса или именем окна в системе. Если такое окно существует, FindWindow возвращает дескриптор окна. Чтобы ограничить поиск дочерними окнами конкретного приложения, используйте функцию FindWindowEx.

Функция IsWindow определяет, определяет ли дескриптор окна допустимое существующее окно. Существуют специальные константы, которые могут заменить дескриптор окна в определенных функциях. Например, приложение может использовать HWND_BROADCAST в SendMessage и функции SendMessageTimeout или HWND_DESKTOP в функции MapWindowPoints.

Создание окна

Чтобы создать окна приложений, используйте функции CreateWindow или CreateWindowEx. Необходимо указать сведения, необходимые для определения атрибутов окна. CreateWindowEx имеет параметр dwExStyle, которого нет у CreateWindow; в противном случае функции идентичны. На самом деле CreateWindow просто вызывает CreateWindowEx с параметром dwExStyle, установленным в ноль. По этой причине остальная часть этого обзора относится только к CreateWindowEx.

В этом разделе содержатся следующие разделы:

Заметка

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

 

Создание главного окна

Каждое приложение на основе Windows должно иметь WinMain в качестве функции точки входа. WinMain выполняет ряд задач, включая регистрацию класса окна для главного окна и создание главного окна. WinMain регистрирует класс главного окна путем вызова функции RegisterClass и создает главное окно путем вызова функции CreateWindowEx.

Функция WinMain также может ограничить приложение одним экземпляром. Создайте именованный мьютекс с помощью функции CreateMutex. Если GetLastError возвращает ERROR_ALREADY_EXISTS, существует еще один экземпляр вашего приложения (он создал мьютекс), и следует завершить WinMain.

Система не отображает главное окно автоматически после его создания; Вместо этого приложение должно использовать функцию showWindow , чтобы отобразить главное окно. После создания главного окна приложение WinMain вызывает функцию ShowWindow, передавая два параметра: дескриптор главного окна и флаг, указывающий, следует ли уменьшить или увеличить главное окно при первом отображении. Как правило, флаг можно задать для любого из констант, начиная с префикса SW_. Однако при вызове ShowWindow для отображения главного окна приложения флаг должен иметь значение SW_SHOWDEFAULT. Этот флаг сообщает системе отображать окно, как показано в программе, которая запустила приложение.

Если класс окна зарегистрирован в версии Юникода RegisterClass, окно получает только сообщения Юникода. Чтобы определить, использует ли окно набор символов Юникода или нет, вызовите IsWindowUnicode.

Window-Creation сообщения

При создании любого окна система отправляет сообщения в оконную процедуру. Система отправляет сообщение WM_NCCREATE после создания неклиентной области окна и сообщения WM_CREATE после создания клиентской области. Процедура окна получает оба сообщения перед отображением окна в системе. Оба сообщения включают указатель на структуруCREATESTRUCT, содержащую все сведения, указанные в функции CreateWindowEx. Как правило, процедура окна выполняет задачи инициализации при получении этих сообщений.

При создании дочернего окна система отправляет сообщение WM_PARENTNOTIFY в родительское окно после отправки WM_NCCREATE и WM_CREATE сообщений. Он также отправляет другие сообщения при создании окна. Количество и порядок этих сообщений зависят от класса окна и стиля, а также от функции, используемой для создания окна. Эти сообщения описаны в других разделах в этом файле справки.

Многопоточные приложения

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

Приложение может использовать функцию EnumThreadWindows для перечисления окон, созданных определенным потоком. Эта функция, в свою очередь, передает дескриптор каждому окну потока в функцию обратного вызова, определяемую приложением, EnumThreadWndProc.

Функция getWindowThreadProcessId возвращает идентификатор потока, создавшего определенное окно.

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