Re: GWL(-1)
От: 98fpbc  
Дата: 12.04.14 12:21
Оценка:
Здравствуйте, kero, Вы писали:

K>Не подскажет ли кто ссылку на первоисточник инфы о (GetWindowLong(hwnd,-1)+delta) ?

K>Самому выгуглить не удалось, надежда на матерых зубров
K>Спасибо.

вообще то с каждым окном связана структура WND. находится она конечно в памяти ядра, но также отображается и в юзермоде (только для чтения конечно) для быстрого readonly доступа к некоторым параметрам окна, без перехода в ядро. при вызове GetWindowLongPtrW сначала вызывается

PWND ValidateHwnd(HWND hwnd);


функция которая переводит HWND в PWND (юзермодное отображение конечно) а затем (если PWND != 0) вызывается

LONG_PTR GetWindowData(PWND pWnd, int nIndex);


которая в зависимости от nIndex возвращает те или иные поля структуры WND. в случае же nIndex == -1, возвращается сам указатель на структуру, точнее на поле DWORD state; (первое поле после заголовка THRDESKHEAD).
так что в принципе если определить у себя в коде структуру WND то можно написать

PWND pWnd = CONTAINING_RECORD(GetWindowLongPtrW(hwnd, -1), WND, state);


и имееть (readonly) доступ к структуре WND.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.