Функция 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, RegisterClassExSetParent, 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

Нет

Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz