Frage zu Klickverhalten bei einem ownerdraw Button.
Verfasst: 07.05.2010 21:07
Aloha zusammen,
ich probiere gerade ein wenig mit der Thematik "ownerdrawn Buttons" herum.
Das klappt soweit ganz gut. Die wichtigsten Infos stehen in der API-Hilfe unter DRAWITEMSTRUCT, den Rest hab ich mir aus dem Forum zusammengesucht.
Mein Testcode stellt den Button einwandfrei dar, nur komischerweise reagiert er bei einem Doppelklick nicht so wie ein normaler Button.
Ein normaler Button wird bei einem schnellen Doppelklick zwei mal "eingedrückt", also jedes mal, wenn man den mousebutton drückt.
Bei dem ownerdraw Button ist das nicht so. Da wird der Button nur "eingedrückt", wenn man einfach klickt. Ein Doppelklick wird offenbar verschluckt.
Warum ist das so?
Hier mal mein Testcode:
Öffnet ein Fenster mit zwei Buttons. Links der ownerdraw Button, rechts ein normaler Windowsbutton.
Gruß Markus
ich probiere gerade ein wenig mit der Thematik "ownerdrawn Buttons" herum.
Das klappt soweit ganz gut. Die wichtigsten Infos stehen in der API-Hilfe unter DRAWITEMSTRUCT, den Rest hab ich mir aus dem Forum zusammengesucht.
Mein Testcode stellt den Button einwandfrei dar, nur komischerweise reagiert er bei einem Doppelklick nicht so wie ein normaler Button.
Ein normaler Button wird bei einem schnellen Doppelklick zwei mal "eingedrückt", also jedes mal, wenn man den mousebutton drückt.
Bei dem ownerdraw Button ist das nicht so. Da wird der Button nur "eingedrückt", wenn man einfach klickt. Ein Doppelklick wird offenbar verschluckt.
Warum ist das so?
Hier mal mein Testcode:
Öffnet ein Fenster mit zwei Buttons. Links der ownerdraw Button, rechts ein normaler Windowsbutton.
Code: Alles auswählen
EnableExplicit
; Varaiablen für den Eventloop
Global iEvent.i, iEventType.i, iEventWindow.i, iEventwParam.i, iEventlParam.i, iEventGadget.i, iEventMenu.i
Global iIcon1.i, iIcon2.i
Procedure.i MyWindowCallback(iWindowID, iMessage, wParam, lParam)
Protected *dis.DRAWITEMSTRUCT
Select iMessage
Case #WM_DRAWITEM
*dis.DRAWITEMSTRUCT = lparam
If *dis\CtlType = #ODT_BUTTON
Debug "Act:" + Str(*dis\itemAction)
Debug "Sta:" + Str(*dis\itemState)
Select *dis\itemState
Case #ODS_FOCUS
DrawFrameControl_(*dis\hDC, *dis\rcItem, #DFC_BUTTON, #DFCS_BUTTONPUSH | #DFCS_ADJUSTRECT)
DrawIcon_(*dis\hDC, 4, 4, iIcon1)
Case #ODS_FOCUS | #ODS_SELECTED
DrawFrameControl_(*dis\hDC, *dis\rcItem, #DFC_BUTTON, #DFCS_BUTTONPUSH | #DFCS_PUSHED | #DFCS_ADJUSTRECT)
DrawIcon_(*dis\hDC, 4, 4, iIcon2)
Default
DrawFrameControl_(*dis\hDC, *dis\rcItem, #DFC_BUTTON, #DFCS_BUTTONPUSH)
DrawIcon_(*dis\hDC, 4, 4, iIcon1)
EndSelect
EndIf
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(0, 300, 200, 195, 60, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
iIcon1 = LoadIcon_(0, #IDI_APPLICATION)
iIcon2 = LoadIcon_(0, #IDI_QUESTION)
SetWindowCallback(@MyWindowCallback())
ButtonGadget(0, 10, 10, 40, 40, "Test", #BS_OWNERDRAW)
ButtonGadget(1, 80, 10, 40, 40, "Test2")
Repeat
iEvent = WaitWindowEvent(25)
iEventType = EventType()
iEventWindow = EventWindow()
iEventwParam = EventwParam()
iEventlParam = EventlParam()
iEventGadget = EventGadget()
iEventMenu = EventMenu()
Until iEvent = #PB_Event_CloseWindow
CloseWindow(0)
EndIf