
Ein strukturierter Pointer (nicht ganz korrekt aber...) dient als GadgetID oder WindowID, in der Strukture selber befindet sich das hWnd von Windows. Das ganze kombiniert mit der normalen Vorgehensweise

Code: Alles auswählen
Enumeration ; Windows
#frmMain
EndEnumeration
Dim *Win.LONG(#PB_Compiler_EnumerationValue -1)
Enumeration ;Gadgets
#btnOK
#btnCancel
EndEnumeration
Dim *Gad.LONG(#PB_Compiler_EnumerationValue -1)
Procedure MyWindowCallback(WindowID, Message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
Select Message
Case #WM_COMMAND
Debug GetDlgCtrlID_(GetFocus_())
Debug GetFocus_()
EndSelect
ProcedureReturn Result
EndProcedure
*Win(#frmMain) = OpenWindow(#PB_Any, 0, 0, 200, 50, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "Test")
If *Win(#frmMain)
SetWindowCallback(@MyWindowCallback())
CreateGadgetList(*Win(#frmMain)\l) ; <-- in \l steckt das handle
*Gad(#btnOK) = ButtonGadget(#PB_Any, 10, 10, 80, 30, "Ok")
*Gad(#btnCancel) = ButtonGadget(#PB_Any, 100, 10, 80, 30, "Cancel")
GadgetToolTip(*Gad(#btnOK), "Ich bin der Okay Button")
GadgetToolTip(*Gad(#btnCancel), "Hier wird nicht abgebrochen")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_EventGadget
Select EventGadgetID()
Case *Gad(#btnOK)
MessageRequester("Ok", "GadgetID: " + Str(*Gad(#btnOK)) + Chr(10) + "hWnd: " + Str(*Gad(#btnOK)\l))
Case *Gad(#btnCancel)
MessageRequester("Cancel", "GadgetID: " + Str(*Gad(#btnCancel)) + Chr(10) + "hWnd: " + Str(*Gad(#btnCancel)\l))
EndSelect
EndSelect
ForEver
EndIf
Wäre schön, wenn es in ähnlicher Form, also statt der Long-Struktur eine richtige Gadget-Structure, in PB4.0 umgesetzt wird. So das man anhand des Pointer (ObjektPointer?) immer alle Eigenschaften des Controls zur Verfügung hat.
Das verwenden der LONG Structur ist zwar nicht korrekt, funzt aber.