Здравствуйте, 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.