Пользовательские объекты поддерживают только один дескриптор на объект. Процессы не могут наследовать или дублировать дескрипторы объектов пользователя. Нет ограничений для одного процесса на пользовательские дескрипторы, но есть ограничение для всей системы - 65 536 пользовательских дескрипторов.
Дескрипторы объектов пользователя общедоступны для всех процессов. То есть любой процесс может использовать дескриптор объекта пользователя, при условии, что процесс имеет защищенный доступ к объекту.
На следующей ниже иллюстрации прикладная программа создает объект окна. Функция CreateWindow создает объект окна и возвращает дескриптор объекта.
После того, как объект окна был создан, приложение может использовать дескриптор окна, чтобы показать на экране или изменять окно. Дескриптор остается допустимым до тех пор, пока объект окна не разрушится.
На следующей иллюстрации, прикладная программа разрушает объект окна. Функция DestroyWindow удаляет объект окна из памяти, тем самым делает недействительным дескриптор окна.
Таблица ниже перечисляет объекты пользователя вместе с создающими и разрушающими функциями каждого объекта. Функции-создатели или создают объект и его дескриптор, или просто возвращает дескриптор существующего объекта. Функции-разрушители удаляют объект из памяти, тем самым делая недействительным дескриптор объекта.
Объект пользователя | Функция-создатель | Функция-разрушитель |
---|---|---|
Таблица клавиш-ускорителей (Accelerator table) | CreateAcceleratorTable | DestroyAcceleratorTable |
Каретка (Caret) | CreateCaret | DestroyCaret |
Курсор (Cursor) | CreateCursor, LoadCursor, LoadImage | DestroyCursor |
Диалог DDE (DDE conversation) | DdeConnect, DdeConnectList | DdeDisconnect, DdeDisconnectList |
Фильтр-процедура (Hook) | SetWindowsHookEx | UnhookWindowsHookEx |
Значок (Icon) | CreateIconIndirect, LoadIcon, LoadImage | DestroyIcon |
Меню (Menu) | CreateMenu, CreatePopupMenu, LoadMenu, LoadMenuIndirect | DestroyMenu |
Окно (Window) | CreateWindow, CreateWindowEx, CreateDialogParam, CreateDialogIndirectParam, CreateMDIWindow | DestroyWindow |
Позиция окна (Window position) | BeginDeferWindowPos | EndDeferWindowPos |