Subclassing erstellen mit 32BIT Anwendung kein Problem diese Funktion liefert immer einen gültigen Pointer.
Delphi-Quellcode:
function DialogNotifyProc(WinHandle: HWND; Msg: UINT; wp: WPARAM; lp: LPARAM): LRESULT; stdcall;
//...
DlgHandle := GetParent(WinHandle);
//...
FPrevDlgProc := Pointer(GetWindowLongPtr(DlgHandle, DWL_DLGPROC));
SetWindowLongPtr(DlgHandle, DWL_DLGPROC, LONG_PTR(@DlgProc));
Das
Handle ist gültig.
Aber nicht mit 64Bit. Pointer ist NIL das verstehe wer will.
ZITAT:
Zitat:
Ersetzen Sie SetWindowLong/GetWindowLog durch SetWindowLongPtr/GetWindowLongPtr für GWLP_HINSTANCE, GWLP_ID, GWLP_USERDATA, GWLP_HWNDPARENT und GWLP_WNDPROC, da sie Zeiger und Handles zurückgeben. Zeiger, die an SetWindowLongPtr übergeben werden, sollten in den Typ LONG_PTR und nicht in Integer/Longint umgewandelt werden.
Richtig:
SetWindowLongPtr(hWnd, GWLP_WNDPROC, LONG_PTR(@MyWindowProc));
Falsch:
SetWindowLong(hWnd, GWL_WNDPROC, Longint(@MyWindowProc));
gruss