Seite 1 von 1

ChildWindowFromPoint_: Falsch. Handleermittlung in Container

Verfasst: 30.10.2007 11:14
von CNESM
Hallo Leute,

hab nen kleines Anfängerproblemchen, das ihr mir mal erklären musst.

Warum geht dieser Code ...

Code: Alles auswählen

; www.purearea.net (Sourcecode collection by CNESM)
; Author: Danilo  (updated for PB4.00 by blbltheworm)
; Date: 22. November 2003
; OS: Windows
; Demo: No

#IMAGE = 1

Procedure WindowProc(hWnd,Msg,wParam,lParam)
  Shared WindowProc_ImageInMove
  Select Msg
    Case #WM_LBUTTONDOWN
      WindowProc_ImageInMove = 1
    Case #WM_LBUTTONUP
      WindowProc_ImageInMove = 0
    Case #WM_MOUSEMOVE
      If ChildWindowFromPoint_(hWnd,lParam & $FFFF,(lParam>>16) & $FFFF) = GadgetID(#IMAGE) And wParam&#MK_LBUTTON And WindowProc_ImageInMove
        ResizeGadget(#IMAGE,(lParam & $FFFF)-GadgetWidth(#IMAGE)/2,((lParam>>16)&$FFFF)-GadgetHeight(#IMAGE)/2,#PB_Ignore,#PB_Ignore)
        UpdateWindow_(hWnd) ; Win9x fix
      Else
        WindowProc_ImageInMove = 0
      EndIf
  EndSelect
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

OpenWindow(0,0,0,400,400,"image",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible)
SetWindowCallback(@WindowProc())
CreateGadgetList(WindowID(0))

If CreateImage(#IMAGE,50,50)=0
  MessageRequester("ERROR","Cant create image",#MB_ICONERROR)
  End
EndIf

StartDrawing(ImageOutput(#IMAGE))
f.f = $FF / ImageHeight(#IMAGE)
For a = 0 To ImageHeight(#IMAGE)
  Line(0,a,ImageWidth(#IMAGE),0,RGB($FF,f*a,$00))
Next a
StopDrawing()

ImageGadget(#IMAGE,0,0,0,0,ImageID(#IMAGE))
DisableGadget(#IMAGE,1)    ; added by Andre for PB3.93 compatibility

HideWindow(0,0)

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver
aber folgender Code nicht?

Code: Alles auswählen

; www.purearea.net (Sourcecode collection by CNESM)
; Author: Danilo  (updated for PB4.00 by blbltheworm)
; Date: 22. November 2003
; OS: Windows
; Demo: No

#IMAGE = 1

Procedure WindowProc(hWnd,Msg,wParam,lParam)
  Shared WindowProc_ImageInMove
  Select Msg
    Case #WM_LBUTTONDOWN
      WindowProc_ImageInMove = 1
    Case #WM_LBUTTONUP
      WindowProc_ImageInMove = 0
    Case #WM_MOUSEMOVE
      If ChildWindowFromPoint_(hWnd,lParam & $FFFF,(lParam>>16) & $FFFF) = GadgetID(#IMAGE) And wParam&#MK_LBUTTON And WindowProc_ImageInMove
        ResizeGadget(#IMAGE,(lParam & $FFFF)-GadgetWidth(#IMAGE)/2,((lParam>>16)&$FFFF)-GadgetHeight(#IMAGE)/2,#PB_Ignore,#PB_Ignore)
        UpdateWindow_(hWnd) ; Win9x fix
      Else
        WindowProc_ImageInMove = 0
      EndIf
  EndSelect
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

OpenWindow(0,0,0,400,400,"image",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible)
SetWindowCallback(@WindowProc())
CreateGadgetList(WindowID(0))

If CreateImage(#IMAGE,50,50)=0
  MessageRequester("ERROR","Cant create image",#MB_ICONERROR)
  End
EndIf

StartDrawing(ImageOutput(#IMAGE))
f.f = $FF / ImageHeight(#IMAGE)
For a = 0 To ImageHeight(#IMAGE)
  Line(0,a,ImageWidth(#IMAGE),0,RGB($FF,f*a,$00))
Next a
StopDrawing()


ContainerGadget(9, 8, 8, 300, 300,#PB_Container_Single) 
  ImageGadget(#IMAGE,0,0,0,0,ImageID(#IMAGE))
  DisableGadget(#IMAGE,1)    ; added by Andre for PB3.93 compatibility
CloseGadgetList()
DisableGadget(9,1)


HideWindow(0,0)

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver
Ermittelt ChildWindowFromPoint_ nicht das richtige Handle?!?!?!

Re: ChildWindowFromPoint_: Falsch. Handleermittlung in Conta

Verfasst: 30.10.2007 11:29
von HeX0R
CNESM hat geschrieben: Ermittelt ChildWindowFromPoint_ nicht das richtige Handle?!?!?!
Doch klar, es ermittelt aber logischerweise immer das Containergadget.

Du müsstest das Containergadget als zu untersuchendes Handle nehmen:

Code: Alles auswählen

If ChildWindowFromPoint_(GadgetID(9),...

Re: ChildWindowFromPoint_: Falsch. Handleermittlung in Conta

Verfasst: 30.10.2007 13:50
von CNESM
HeX0R hat geschrieben:
CNESM hat geschrieben: Ermittelt ChildWindowFromPoint_ nicht das richtige Handle?!?!?!
Doch klar, es ermittelt aber logischerweise immer das Containergadget.

Du müsstest das Containergadget als zu untersuchendes Handle nehmen:

Code: Alles auswählen

If ChildWindowFromPoint_(GadgetID(9),...
Ahhh, okey verstanden. Der Container gilt somit als eigentliches "Fenster" des Imagegadgets. Vielen Dank HeX0R!