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


Пользовательские объекты

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

Существует теоретический предел в 65 536 пользовательских дескрипторов на сеанс. Однако максимальное число пользовательских дескрипторов, которые можно открыть в сеансе, обычно меньше, так как на это влияет доступная память. Существует также ограничение по умолчанию для пользовательских дескрипторов. Чтобы изменить это ограничение, задайте следующее значение реестра:

HKEY_LOCAL_MACHINE\ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ\Microsoft\\ Windows NT CurrentVersion\Windows\USERProcessHandleQuota

Для этого значения можно задать число от 200 до 18 000.

Обрабатывает объекты-пользователи

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

На следующем рисунке приложение создает объект окна. Функция CreateWindow создает объект окна и возвращает дескриптор объекта.

приложение, создающее объект окна

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

На следующем рисунке приложение уничтожает объект окна. Функция DestroyWindow удаляет объект окна из памяти, что делает дескриптор окна недействительным.

уничтожение объекта окна

Управление пользовательскими объектами

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

Объект-пользователь Функция Creator Функция разрушителя
Таблица ускорителей CreateAcceleratorTable DestroyAcceleratorTable
Курсор CreateCaret DestroyCaret
Курсор CreateCursor, LoadCursor, LoadImage DestroyCursor
Беседа DDE DdeConnect, DdeConnectList DdeDisconnect, DdeDisconnectList
Обработчик SetWindowsHookEx UnhookWindowsHookEx
Значок CreateIconIndirect, LoadIcon, LoadImage DestroyIcon
Меню CreateMenu, CreatePopupMenu, LoadMenu, LoadMenuIndirect DestroyMenu
Окно CreateWindow, CreateWindowEx, CreateDialogParam, CreateDialogIndirectParam, CreateMDIWindow Destroywindow
Положение окна BeginDeferWindowPos EndDeferWindowPos