Функция SetWindowLongPtr
Функция SetWindowLongPtr изменяет атрибуты указанного окна. Функция также устанавливает и значение при заданном смещении в дополнительной памяти окна.
Эта функция заменяет функцию SetWindowLong. Чтобы написать код, который является совместимым и с 32-разрядными и с 64-разрядными версиями Microsoft ® Windows ®, используйте SetWindowLongPtr.
Синтаксис
LONG_PTR SetWindowLongPtr( HWND hWnd, int nIndex, LONG_PTR dwNewLong ); |
Параметры
hWnd
[in] Дескриптор окна и, косвенно, класс в которому принадлежит окно. Функция SetWindowLongPtr завершается ошибкой, если окно, указанное параметром hWnd не принадлежит одному и тому же процессу, что и вызывающий поток.nIndex
[in] Определяет отсчитываемую от нуля величину смещение для устанавливаемого значения. Допустимые значения находятся в диапазоне от нуля до числа байтов дополнительной памяти окна, минус размер целого числа. Чтобы установить любое другое значение, задайте одну из ниже перечисленных именованных констант.
Значение | Предназначение |
GWL_EXSTYLE | Устанавливает новый дополнительный стиль окна. Дополнительную информацию, см. в описании CreateWindowEx. |
GWL_STYLE | Устанавливает новый стиль окна |
GWLP_WNDPROC | Устанавливает новый адрес для оконной процедуры. |
GWLP_HINSTANCE | Устанавливает новый дескриптор экземпляра приложения. |
GWLP_ID | Устанавливает новый идентификатор окна. |
GWLP_USERDATA | Устанавливает пользовательские данные, связанные с окном. Это данные предназначаются для использования приложением, которое создавало окно. Его значение первоначально является нулевым. |
Ниже следуют значения, которые доступны тогда, когда параметр hWnd идентифицирует диалоговое окно.
Значение | Предназначение |
DWLP_DLGPROC | Устанавливает новый указатель на процедуру диалогового окна. |
DWLP_MSGRESULT | Устанавливает возвращаемое значение сообщения, обработанного в процедуре диалогового окна. |
DWLP_USER | Устанавливает дополнительную информацию, которая является частной для приложения, такая как дескрипторы или указатели. |
dwNewLong
[in] Определяет заменяемое значение.Возвращаемое значение
Если функция завершается успешно, возвращаемое значение - предыдущее значение при заданном смещении.
Если функция завершается ошибкой, возвращаемое значение равняется нулю. Чтобы получить дополнительную информацию об ошибке, вызовите 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.
Смотри также
Обзор Классы окна, Функции, используемые классами окна, CallWindowProc, GetWindowLongPtr, RegisterClassEx, SetParent, WindowProc, WNDCLASSEX
Размещение и совместимость SetWindowLongPtr |
|
Windows. NET Server |
Да |
Windows XP |
Да |
Windows 2000 |
Да |
Windows NT |
Да версии 3.1 и выше |
Windows Me |
Да |
Windows 98 |
Да |
Windows 95 |
Да |
Используемая библиотека |
User32.lib |
Заголовочный файл |
|
- объявлено в |
Winuser.h |
- включено в |
Windows.h |
Unicode |
Нет |
Замечания по платформе |
Не имеется |