Stringgadget Subclassing Frage zur Messageverarbeitung
Verfasst: 04.09.2013 21:09
Einen schönen guten Abend,
Beim Subclassing wird mit Procedurereturn ja die vorherige "Original" Windowprozedur am Ende wieder aufgerufen.
ich möchte nach meinem Callback die weitere Verarbeitung einer Message unterbinden.
im Beispiel mache ich das bei #VK_UP indem ich die Message lösche.
bei #VK_DOWN mache ich das mit ProcedureReturn 0
Frage: Welche Methode ist besser, richtiger, sinnvoller ???
Beim Subclassing wird mit Procedurereturn ja die vorherige "Original" Windowprozedur am Ende wieder aufgerufen.
ich möchte nach meinem Callback die weitere Verarbeitung einer Message unterbinden.
im Beispiel mache ich das bei #VK_UP indem ich die Message lösche.
bei #VK_DOWN mache ich das mit ProcedureReturn 0
Frage: Welche Methode ist besser, richtiger, sinnvoller ???
Code: Alles auswählen
Enumeration
#mainwindow
#stringgadget1
#stringgadget2
EndEnumeration
EnableExplicit
Procedure SubclassingCallback(hwnd, msg, wParam, lParam)
;hwnd ist hier gleich der ID vom StringGadget
Protected ptr = GetWindowLongPtr_(hwnd, #GWL_USERDATA)
If msg = #WM_KEYDOWN
Select wparam
Case #VK_UP
;tue irgendwas
;
;nun soll die Message von der Original-Windowprozedur
;nicht mehr verarbeitet werden
;Möglichkeit 1
msg = 0
Case #VK_DOWN
;tue irgendwas
;
;nun soll die Message von der Original-Windowprozedur
;nicht mehr verarbeitet werden
;Möglichkeit 2
ProcedureReturn 0
EndSelect
EndIf
ProcedureReturn CallWindowProc_(ptr, hwnd, msg, wParam, lParam)
EndProcedure
Define event, ptr
OpenWindow(#mainwindow, 0, 0, 250, 150, "Main", #PB_Window_ScreenCentered |#PB_Window_SystemMenu)
StringGadget(#stringgadget1, 10, 30, 180, 22, "Pfeil oben/unten")
StringGadget(#stringgadget2, 10, 80, 180, 22, "Pfeil oben/unten hier verboten")
ptr = GetWindowLongPtr_(GadgetID(#stringgadget2), #GWL_WNDPROC)
SetWindowLongPtr_(GadgetID(#stringgadget2), #GWL_WNDPROC, @SubclassingCallback())
SetWindowLongPtr_(GadgetID(#stringgadget2), #GWL_USERDATA, ptr)
Repeat
event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow