Probably in a function SetWindowLongPtr_() declaration bug, because it does not work on Windows 8 x64.
Function GetLastError_(), returns an error code 1413. The same error when using the SetClassLongPtr_().
Code: Select all
Global *OldCallback
Procedure CallW(hWnd, Msg, wParam, lParam)
Debug msg
If msg = #WM_RBUTTONDOWN
msg = 0
EndIf
ProcedureReturn CallWindowProc_(*OldCallback, hWnd, msg, wParam, lParam)
EndProcedure
If OpenWindow(0, 0, 0, 400, 100, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StringGadget(0, 10, 10, 380, 20, "")
*OldCallback = SetWindowLongPtr_(GadgetID(0), #GWLP_WNDPROC, @CallW())
Debug GetLastError_()
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
EndIf
Code: Select all
Import "User32.lib"
SetWindowLongPtrW(hWnd, Index, NewLong.l)
EndImport
Global *OldCallback
Procedure CallW(hWnd, Msg, wParam, lParam)
Debug msg
If msg = #WM_RBUTTONDOWN
msg = 0
EndIf
ProcedureReturn CallWindowProc_(*OldCallback, hWnd, msg, wParam, lParam)
EndProcedure
If OpenWindow(0, 0, 0, 400, 100, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StringGadget(0, 10, 10, 380, 20, "")
*OldCallback = SetWindowLongPtrW(GadgetID(0), #GWLP_WNDPROC, @CallW())
Debug GetLastError_()
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
EndIf