Функция SetWindowLongPtrA (winuser.h)
Изменяет атрибут указанного окна. Функция также задает значение с указанным смещением в дополнительной памяти окна.
Синтаксис
LONG_PTR SetWindowLongPtrA(
[in] HWND hWnd,
[in] int nIndex,
[in] LONG_PTR dwNewLong
);
Параметры
[in] hWnd
Тип: HWND
Дескриптор для окна и, косвенно, класса, к которому принадлежит окно. Функция SetWindowLongPtr завершается сбоем, если процесс, которому принадлежит окно, заданное параметром hWnd , находится на более высоких правах процесса в иерархии UIPI, чем процесс, в котором находится вызывающий поток.
Windows XP/2000: Функция SetWindowLongPtr завершается сбоем , если окно, указанное параметром hWnd , не принадлежит тому же процессу, что и вызывающий поток.
[in] nIndex
Тип: int
Отсчитываемое от нуля смещение к заданному значению. Допустимые значения находятся в диапазоне от нуля до количества байтов дополнительной памяти окна за вычетом размера LONG_PTR. Чтобы задать любое другое значение, укажите одно из следующих значений.
Значение | Значение |
---|---|
|
Задает новый расширенный стиль окна. |
|
Задает новый дескриптор экземпляра приложения. |
|
Задает новый идентификатор дочернего окна. Окно не может быть окном верхнего уровня. |
|
Задает новый стиль окна. |
|
Задает пользовательские данные, связанные с окном. Эти данные предназначены для использования приложением, создающим окно. Изначально его значение равно нулю. |
|
Задает новый адрес для процедуры окна. |
Следующие значения также доступны, если параметр hWnd определяет диалоговое окно.
[in] dwNewLong
Тип: LONG_PTR
Значение на замену.
Возвращаемое значение
Тип: LONG_PTR
Если функция выполняется успешно, возвращаемое значение является предыдущим значением указанного смещения.
Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Если предыдущее значение равно нулю и функция завершается успешно, возвращаемое значение равно нулю, но функция не очищает сведения о последней ошибке. Чтобы определить успешное или неудачное завершение, очистите последние сведения об ошибке, вызвав Метод SetLastError с 0, а затем вызовите Метод SetWindowLongPtr. Сбой функции будет отмечен возвращаемым значением, равным нулю, и результатом GetLastError , который не равен нулю.
Комментарии
Некоторые данные окна кэшируются, поэтому изменения, внесенные с помощью SetWindowLongPtr, не вступают в силу, пока вы не вызовете функцию SetWindowPos .
Если вы используете SetWindowLongPtr с индексом GWLP_WNDPROC для замены процедуры окна, процедура окна должна соответствовать рекомендациям, указанным в описании функции обратного вызова WindowProc .
Если вы используете SetWindowLongPtr с индексом DWLP_MSGRESULT , чтобы задать возвращаемое значение для сообщения, обработанного процедурой диалогового окна, процедура диалогового окна должна возвращать значение TRUE непосредственно после этого. В противном случае при вызове любой функции, которая приводит к тому, что процедура диалогового окна получает сообщение о окне, вложенное сообщение окна может перезаписать возвращаемое значение, заданное с помощью DWLP_MSGRESULT.
Вызов Метода SetWindowLongPtr с индексом GWLP_WNDPROC создает подкласс класса окна, используемого для создания окна. Приложение может подкласс системного класса, но не должно подкласса класса окна, созданного другим процессом. Функция SetWindowLongPtr создает подкласс окна, изменяя процедуру окна, связанную с определенным классом окна, в результате чего система вызывает новую процедуру окна вместо предыдущей. Приложение должно передавать все сообщения, не обработанные новой процедурой окна, в предыдущую процедуру, вызывая CallWindowProc. Это позволяет приложению создать цепочку оконных процедур.
Зарезервируйте дополнительную память окна, указав ненулевое значение в элементе cbWndExtra структуры WNDCLASSEX, используемой с функцией RegisterClassEx .
Не вызывайте SetWindowLongPtr с индексом GWLP_HWNDPARENT , чтобы изменить родительский элемент дочернего окна. Вместо этого используйте функцию SetParent .
Если окно имеет стиль класса CS_CLASSDC или CS_PARENTDC, не устанавливайте стили расширенных окон WS_EX_COMPOSITED или WS_EX_LAYERED.
Вызов Метода SetWindowLongPtr для задания стиля на индикаторе выполнения приведет к сбросу его положения.
Примечание
Заголовок winuser.h определяет SetWindowLongPtr в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | winuser.h (включая Windows.h) |
Библиотека | User32.lib |
DLL | User32.dll |
Набор API | ext-ms-win-ntuser-windowclass-l1-1-0 (представлено в Windows 8) |
См. также раздел
Основные понятия
Справочные материалы