Windows


Справочная система к Borland C++ 5.02 (только раздел о Win API), перевод Трубецкого А.
Этот раздел сайта постоянно обновляется (по мере появления новых переводов)
На главную

Далее
Окна
Окно рабочего стола
Приложение Windows
Компоненты окна приложения
Контролы, диалоговые панели и панели сообщений
Z-порядок
Создание окна
Атрибуты окна
Дескрипторы окна
Создание главного окна
Сообщения, посылаемые при создании окна
Многопоточные приложения
Общие стили окна
Перекрывающиеся окна
Временные окна
Дочерние окна



1. Окна
Окном в приложении, написанном в ОС Microsoft® Windows®, называется прямоугольная область экрана, где приложение отображает выходные данные и получает данные от пользователя. Окно использует экран совместно с другими окнами, включая окна других приложений. В каждый момент времени только одно окно может получать входные данные от пользователя. Пользователь может использовать мышь, клавиатуру или другое устройство ввода данных для взаимодействия с этим окном и приложением, которому оно принадлежит.
Окно - это в первую очередь средство, с помощью которого графическое приложение Win32 должно взаимодействовать с пользователем и выполнять задачи, поэтому одной из первых задач графического приложения Win32 является создание окна. В данном кратком обзоре описываются элементы Microsoft® Win32® API, который используется приложениями для создания и использования окон, управления взаимодействием окон, изменением размера, движением и отображением окон на экране.


3. Окно рабочего стола
При запуске Windows автоматически создается окно рабочего стола (desktop window). Окно рабочего стола - определяемое системой окно, которое отображает фон экрана и служит основой для всех остальных окон, отображаемых приложениями.

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

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

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


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

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


5. Компоненты окна приложения
Окно приложения включает в себя такие элементы, как заголовок (title bar), меню (menu bar), системное меню (system menu), кнопку свертывания окна (minimize button), кнопка развертывания окна (maximize button), кнопка восстановления (restore button), кнопка закрытия приложения (close button), рамку, позволяющую менять размеры окна (sizing border), клиентскую область (client area), горизонтальную и вертикальную полосы прокрутки (horizontal and vertical scroll bars). Главное окно приложения обычно включает все эти компоненты.

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

Большинство приложений содержат меню, которое представляет собой список команд, поддерживаемых приложением. Пункты меню являются основными категориями команд. При выборе пункта меню обычно открывается всплывающее меню (pop-up menu), пункты которого соответствуют задачам в пределах данной категории. Выбирая команду, пользователь сообщает приложению о необходимости выполнить определенную задачу.

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

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

Заголовок окна, меню, системное меню, кнопки свертывания и развертывания, рамка окна и полосы прокрутки все вместе считаются неклиентской областью окна (nonclient area). Windows управляет большей частью поведения неклиентской области; приложение управляет всем остальным. В частности приложение управляет видом и поведением клиентской области.


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

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

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

Окно сообщений (message box) - это окно, которое отображает примечание или предупреждение для пользователя. Например, окно сообщений может сообщить пользователю о проблеме, с которой приложение столкнулось при выполнении какой-либо задачи.

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


7. Z-порядок
Z-порядок (Z order) окна указывает позицию, которую оно занимает в стеке перекрывающихся (overlapping) окон. Этот оконный стек ориентирован вдоль мнимой оси z, направленной наружу из экрана. Окно, находящееся наверху Z-порядка, перекрывает все другие окна. Окно, находящееся внизу Z-порядка, оказывается перекрытым всеми остальными окнами.

Windows поддерживает Z-порядок в виде одиночного списка. Окна добавляются к Z-порядку независимо от того, являются ли они приоритетными (topmost) окнами, окнами верхнего уровня (top-level), или дочерними (child) окнами. Приоритетное окно перекрывает все другие неприоритетные окна независимо от того, является ли оно само активным. Приоритетное окно имеет стиль WS_EX_TOPMOST. Все приоритетные окна появляются в Z-порядке прежде любых неприоритетных окон. Дочерние окна группируются в Z-порядке вместе со своими родителями.

Когда приложение создает окно, Windows помещает его на вершину Z-порядка для окон того же типа. Вы можете использовать функцию BringWindowToTop(), чтобы перенести окно на вершину Z-порядка для окон того же типа. Вы также можете перестроить Z-порядок, используя функции SetWindowPos() и DeferWindowPos().

Пользователь изменяет Z-порядок, когда активирует другое окно. Windows помещает активное окно на вершину Z-порядка для окон того же типа. Когда окно перемещается на вершину Z-порядка, его дочерние окна перемещаются вместе с ним. Вы можете использовать функцию GetTopWindow() для поиска всех дочерних окон родительского окна и получения дескриптора дочернего окна, которое находится на вершине Z-порядка. Функция GetNextWindow() позволяет получить дескриптор следующего или предыдущего окна в Z-порядке.


8. Создание окна
Приложение создает свои окна (в том числе главное окно), используя функцию CreateWindow() или CreateWindowEx() и предоставляя Windows информацию, которая требуется для определения атрибутов окна. CreateWindowEx() имеет параметр dwExStyle, который отсутствует у функции CreateWindow(); в остальном эти функции идентичны. Фактически CreateWindow() просто вызывает CreateWindowEx() с параметром dwExStyle, равным нулю.

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


9. Атрибуты окна
При создании окна приложение должно предоставить Windows следующую информацию:
Класс окна (Window class)
Имя окна (Window name)
Стиль окна (Window style)
Родитель или владелец окна (Parent or owner window)
Размер (Size)
Расположение (Location)
Позиция (Position)
Идентификатор дочернего окна или дескриптор меню (Child-window identifier or menu handle)
Дескриптор копии приложения (Instance handle)
Дополнительные данные (Creation data)

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

Имя окна
Окно может иметь имя, которое представляет собой текстовую строку, идентифицирующую окно для пользователя. Главное окно, диалоговое окно или окно сообщений обычно отображают свое имя в заголовке окна, если он присутствует. Для контрола способ отображения имени окна зависит от класса, к которому относится данный контрол. Например, кнопка и поле редактирования (edit control) отображают свое имя в пределах прямоугольника, занимаемого контролом. Список (list box) и раскрывающийся список (combo box) не отображают свое имя.

С помощью функции SetWindowText() приложение может изменить имя окна после его создания. Используя функции GetWindowTextLength() и GetWindowText(), можно получить текущий текст названия окна.

Стиль окна
Каждое окно имеет один или более стилей окна. Стиль окна - это именованная константа, которая определяет особенности вида и поведения окна, которые не определены классом окна. Например, класс SCROLLBAR создает полосу прокрутки, но стили SBS_HORZ, и SBS_VERT определяют, создается ли горизонтальная или вертикальная полоса прокрутки. Несколько стилей окна относятся ко всем окнам, но большинство относятся к окнам определенных классов. За интерпретацию стилей окна отвечает Windows и, в некоторой степени, функция окна данного класса.

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

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

Расположение, размер и позиция в Z-порядке
Каждое окно характеризуется расположением, размером и позицией в Z-порядке. Расположение (location) - это координаты верхнего левого угла окна относительно верхнего левого угла экрана или, в случае дочернего окна, относительно верхнего левого угла клиентской области родителя. Размер (size) окна - его ширина и высота, измеряемые в пикселах. Позиция (position) в Z-порядке - это позиция окна в стеке перекрывающихся окон.

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

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

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

Дополнительные данные
Каждое окно может иметь связанные с ним дополнительные данные. При создании окна Windows передает указатель на дополнительные данные функции окна. Функция окна использует эти данные, чтобы инициализировать определяемые приложением переменные.


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

В Win32 API есть несколько специальных констант, которые могут заменять дескриптор окна в некоторых функциях. Например, приложение может использовать константу HWND_TOPMOST в функции SendMessageTimeout(), HWND_BROADCAST в функции SendMessage() или HWND_DESKTOP в функции MapWindowPoints().

Хотя константа NULL не является дескриптором окна, Вы можете использовать ее в некоторых функциях, чтобы определить, что они не воздействуют ни на какое окно. Например, определяя NULL в качестве параметра hwndParent функции CreateWindowEx(), Вы создаете окно, которое не имеет родителя или владельца. Некоторые функции могут возвращать NULL вместо дескриптора, указывая, что данное действие не применяется ни к какому окну.

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


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

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

Windows не отображает автоматически главное окно после его создания; приложение должно использовать функцию ShowWindow(), чтобы отобразить главное окно. После создания главного окна функция WinMain() вызывает функцию ShowWindow(), передавая ей два параметра: дескриптор главного окна и флаг, определяющий, должно ли главное окно быть свернуто или развернуто в момент отображения. Обычно флаг может быть установлен в любую из констант, начинающихся с префикса SW_. Однако, когда ShowWindow() вызывается, чтобы отобразить главное окно приложения, флаг должен быть установлен в SW_SHOWDEFAULT. Этот флаг сообщает Windows, что нужно отобразить окно так, как указано программой, которая запустила приложение.

Если окно создается как окно Unicode, оно получает только сообщения Unicode. Вы можете определить, является ли данное окно окном Unicode, вызвав функцию IsWindowUnicode().


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

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


13. Многопоточные приложения
Приложение Win32 может иметь множество потоков выполнения, и каждый поток может создавать окна. Поток, который создает окно, должен содержать код функции этого окна.

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

Функция GetWindowThreadProcessId() возвращает идентификатор потока, который создал определенное окно.

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


14. Общие стили окна
Win32 API поддерживает общие стили окна (general window styles) и стили окна для специфических классов (class-specific window styles). Общие стили окна представлены константами, которые начинаются с префикса WS_ ; их можно объединять с помощью оператора OR для формирования различных типов окон, включая главные, диалоговые и дочерние окна. Стили окна для специфических классов определяют внешний вид и поведение окон, принадлежащих к определенным классам контролов, например, полей редактирования или списков.

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


15. Перекрывающиеся окна (
overlapped windows)
Перекрывающееся окно - это окно верхнего уровня, которое имеет заголовок, рамку и клиентскую область; предполагается, что перекрывающееся окно выполняет функции главного окна приложения. Оно может также иметь системное меню, кнопки свертывания и развертывания и полосы прокрутки. Перекрывающееся окно, используемое в качестве главного окна, обычно содержит все эти компоненты.

Чтобы создать перекрывающееся окно, приложение определяет стиль WS_OVERLAPPED или WS_OVERLAPPEDWINDOW в функции CreateWindowEx(). Если Вы используете стиль WS_OVERLAPPED, окно будет иметь заголовок и рамку. Если Вы используете стиль WS_OVERLAPPEDWINDOW, окно будет иметь заголовок, рамку, позволяющую изменять размер окна, системное меню, и кнопки свертывания и развертывания.


16. Временные окна (pop-up windows)
Временное окно - это разновидность перекрывающегося окна, которая используется для диалоговых окон, окон сообщений, и других временных окон, которые появляются вне главного окна приложения. Наличие заголовка не является обязательным для временных окон; в противном случае, временные окна представляют собой то же самое, что и перекрывающиеся окна стиля WS_OVERLAPPED.

Вы можете создать временное окно, определив стиль WS_POPUP в функции CreateWindowEx(). Чтобы временное окно имело заголовок, определите стиль WS_CAPTION. Используйте стиль WS_POPUPWINDOW для создания временного окна, которое будет иметь рамку и системное меню. Чтобы сделать системное меню окна видимым, Вы должны объединить стили WS_CAPTION и WS_POPUPWINDOW.


17. Дочерние окна (child windows)
Дочернее окно имеет стиль WS_CHILD и не может покидать клиентскую область своего родительского окна. Приложение обычно использует дочерние окна для разделения клиентской области родительского окна на отдельные функциональные области. Для создания дочернего окна Вы должны определить стиль WS_CHILD в функции CreateWindowEx().

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

Позиционирование
Windows всегда позиционирует дочернее окно относительно верхнего левого угла клиентской области родительского окна. Никакая часть дочернего окна не может появиться за границами его родительского окна. Если приложение создает дочернее окно, размер которого больше, чем размер родительского окна, или позиционирует дочернее окно так, что некоторые его части или все дочернее окно находятся за границами родителя, Windows отсекает дочернее окно, то есть та часть дочернего окна, которая находится вне клиентской области родителя, не отображается. Действия, которые влияют на родительское окно, могут влиять и на дочернее окно следующим образом:
Родительское окно
Дочернее окно
Уничтожается
Уничтожается до того, как уничтожается родительское окно
Сворачивается
Сворачивается до того, как сворачивается родительское окно. Дочернее окно может быть видимым только когда родительское окно является видимым.
Перемещается
Перемещается вместе с клиентской областью родителя. Дочернее окно само отвечает за отображение своей клиентской области после передвижения
Отображается
Отображается после того, как отображается родительское окно

Отсечение (clipping)
Windows автоматически не отсекает дочернее окно от клиентской области родительского окна. Это означает, что родительское окно рисует поверх дочернего окна, если оно рисует в том же месте, где находится дочернее окно. Windows, однако, отсекает дочернее окно от клиентской области родительского окна, если родительское окно имеет стиль WS_CLIPCHILDREN. Если дочернее окно отсекается, родительское окно не может рисовать поверх него.

Дочернее окно может перекрывать другие дочерние окна в той же клиентской области. Дочернее окно, которое использует родительское окно совместно с другими дочерними окнами, по отношению к ним является сестринским окном (sibling window). Сестринские окна могут рисовать в клиентской области друг друга за исключением случая, когда одно из дочерних окон имеет стиль WS_CLIPSIBLINGS. Если дочернее окно имеет этот стиль, то любая часть сестринского окна, которая находится в пределах данного дочернего окна, отсекается.

Если окно имеет стиль WS_CLIPCHILDREN или WS_CLIPSIBLINGS, это приводит к небольшой потере эффективности. Каждое окно занимает системные ресурсы, поэтому приложение не должно использовать дочерние окна без необходимости. Если нужно логически разделить главное окно приложения, для большей эффективности следует делать это в функции окна, а не путем использования дочерних окон.

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

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

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

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


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

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

Далее
На главную

Автотехника Сантехника Флора Косметика Одежда Часы
Лидеры продаж. Навесные потолки в доме; натяжной потолок монтаж заказ . Изготовление из высококачественных материалов. по лучшим ценам