Magnetrand?!

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

OK, freedimension - nun habe ich Deinen Fehler wohl auch
gesehen und mich ziemlich gewundert.
Habe jetzt einige Wege probiert und haufenweise Code geschrieben...
dabei scheint die korrekte(?) Lösung doch viel einfacher zu sein:

Code: Alles auswählen

;
; Workarea Border Magnet (2)
;
;   by Danilo, 9th March 2005
;
#MAGNET = 25

Procedure WndProc(hWnd,Msg,wParam,lParam)
  Static MouseOffsetX,MouseOffsetY

  If hWnd = WindowID(0)
    Select Msg
      Case #WM_NCLBUTTONDOWN
        GetWindowRect_(hWnd,rect.RECT)
        MouseOffsetX = (lParam & $FFFF)       - rect\left
        MouseOffsetY = ((lParam >> 16)&$FFFF) - rect\top
      Case #WM_MOVING
        *rect.RECT = lParam
        If *rect
          width  = *rect\right  - *rect\left
          height = *rect\bottom - *rect\top
          SystemParametersInfo_(#SPI_GETWORKAREA,0,rect.RECT,0)

          GetCursorPos_(m.POINT)
          *rect\left  = m\x - MouseOffsetX
          *rect\top   = m\y - MouseOffsetY
          *rect\right = *rect\left + width
          *rect\bottom= *rect\top  + height

          If *rect\left  < #MAGNET                  ; left
            *rect\left = 0 : modified = 1
          EndIf
          If *rect\top  < #MAGNET                    ; top
            *rect\top  = 0 : modified = 1
          EndIf
          If *rect\right > rect\right - #MAGNET      ; right
            *rect\left = rect\right  - width  : modified = 1
          EndIf
          If *rect\bottom > rect\bottom - #MAGNET    ; bottom
            *rect\top  = rect\bottom - height : modified = 1
          EndIf

          If modified
            *rect\right  = *rect\left + width
            *rect\bottom = *rect\top  + height
          EndIf
          ProcedureReturn #TRUE
        EndIf
    EndSelect
  EndIf
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure



OpenWindow(0,0,0,200,200,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Move me!")
  SetWindowCallback(@WndProc())

Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
Dachte schon ich bin zu blöd dazu, nachdem es mit tausenden
Abfragen mehr noch immer nicht richtig ging. ;)

Also nochmal von vorne angefangen... und siehe da, scheint
so zu funktionieren wie man es kennt und erwartet.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
benny
Beiträge: 383
Registriert: 29.08.2004 09:18
Wohnort: Am Ende des www's
Kontaktdaten:

Beitrag von benny »

Danilo's Code läuft bei mir ohne Probleme.

Nette Idee mit dem Magnetrand - thx 4 sharing :!:
So long,
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

Beitrag von Lukaso »

@Danilo
Danke, konnte mir meine benötigten Teile rauspicken ... :allright:

MFG Lukaso
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
Antworten