souris dans un openscreen

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

souris dans un openscreen

Message par Patrick88 »

je pige pas bien pourquoi :

1) la souris reste bloqué dans la fenêtre graphique et ne veux plus en sortir sauf si je supprime le examinemouse... mais dans ce cas à t'on encore accés à la fenêtre graphique ( en terme de coordonné graphique )

2) est il absolument necessaire de faire des createsprite chaque fois que l'on veut dessiner quelque chose sur la fenêtre graphique ? c'est chiant !
on peut pas faire des bêtes startdrawing.... ?

Code : Tout sélectionner

;- déclaration constante
Enumeration
  #WIN_MAIN
  #GDT_STATUSBAR
  #GDT_STATUSBAR_COORDX
  #GDT_STATUSBAR_COORDY
  
  #SPR_CURSEUR
EndEnumeration

;- déclaration structure
Structure STRU_INFO_WINDOW
  ;relatif à la fenêtre principale
  main_x.w
  main_y.w
  main_width.w
  main_height.w
  main_flag.l
  main_version.s
  
  ;relatif à la zone de dessin
  draw_x.w 
  draw_y.w 
  draw_width.w
  draw_height.w
  draw_AutoStretch.l
  draw_RightOffset.w
  draw_BottomOffset.w
EndStructure

;- déclaration variable
Global INFO_WINMAIN.STRU_INFO_WINDOW

; ScreenWidth = GetSystemMetrics_(#SM_CXSCREEN)
; ScreenHeight = GetSystemMetrics_(#SM_CYSCREEN)

Procedure initialisation()
  ;relatif à la fenêtre principale
  INFO_WINMAIN\main_x = 0
  INFO_WINMAIN\main_y = 0
  INFO_WINMAIN\main_width = 600
  INFO_WINMAIN\main_height = 350
  INFO_WINMAIN\main_flag = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget
  INFO_WINMAIN\main_version = "Draw-01-00"

  ;relatif à la zone de dessin
  INFO_WINMAIN\draw_x = 4
  INFO_WINMAIN\draw_y = 4
  INFO_WINMAIN\draw_RightOffset = 25
  INFO_WINMAIN\draw_BottomOffset = 25
  INFO_WINMAIN\draw_width = INFO_WINMAIN\main_width - INFO_WINMAIN\draw_x-INFO_WINMAIN\draw_RightOffset
  INFO_WINMAIN\draw_height = INFO_WINMAIN\main_height - INFO_WINMAIN\draw_y-INFO_WINMAIN\draw_BottomOffset
  INFO_WINMAIN\draw_AutoStretch = 1
  
If InitSprite() = 0 Or InitKeyboard()=0 Or InitMouse()  = 0
  MessageRequester( "Erreur" , "Impossible d'initialiser DirectX 7 Ou plus" , 0 )
  End
ElseIf OpenWindow(#WIN_MAIN,INFO_WINMAIN\main_x,INFO_WINMAIN\main_y,INFO_WINMAIN\main_width,INFO_WINMAIN\main_height,INFO_WINMAIN\main_flag,INFO_WINMAIN\main_version) = 0
  MessageRequester( "Erreur", "Impossible d'ouvrir la fenêtre")
  End
EndIf
If OpenWindowedScreen( WindowID(#WIN_MAIN), INFO_WINMAIN\draw_x,INFO_WINMAIN\draw_y,INFO_WINMAIN\draw_width,INFO_WINMAIN\draw_height, INFO_WINMAIN\draw_AutoStretch, INFO_WINMAIN\draw_RightOffset, INFO_WINMAIN\draw_BottomOffset ) = 0
  MessageRequester( "Erreur" , "Impossible d'ouvrir l'écran " , 0 )
  End
EndIf
If CreateStatusBar(#GDT_STATUSBAR, WindowID(#WIN_MAIN)) 
  AddStatusBarField(80) 
  AddStatusBarField(80)
EndIf 

CreateSprite(#SPR_CURSEUR,20,20)
StartDrawing(SpriteOutput(#SPR_CURSEUR))
FrontColor(255,0,0)
LineXY(10,0,10,20)
LineXY(0,10,20,10)
StopDrawing()
  

EndProcedure

initialisation()
Repeat
  ClearScreen(255,255,255)
 
  ExamineMouse()
  mx.w = MouseX() : my.w = MouseY()
  
  DisplaySprite(#SPR_CURSEUR,mx-10,my-10)
  
  Debug Str(mx)+"/"+Str(my)
  

  mx = WindowMouseX() : my = WindowMouseY()
  StatusBarText(#GDT_STATUSBAR, 0, "X:"+Str(mx)) 
  StatusBarText(#GDT_STATUSBAR, 1, "Y:"+Str(my)) 
  
  ;- gestion des évenement windows
  Select WindowEvent()
    Case #PB_Event_CloseWindow : Quit = 1
      

    ;-Gadgets
    Case #PB_Event_Gadget
      Select EventGadgetID()
      EndSelect
  EndSelect
  FlipBuffers()
  Delay(1)
Until Quit>0
End
merci

patrick
Aranoth
Messages : 293
Inscription : sam. 24/janv./2004 12:00
Localisation : Toulouse (31)
Contact :

Message par Aranoth »

Si j'ai bien compris,

pour liberer la souris utilise

ReleaseMouse(1), la souris pourra alors quitter l'écran

et pour les sprites non!

Code : Tout sélectionner

StartDrawing(ScreenOutput())
Débutant en programmation, notament en C++ ?
Vous souhaitez apprendre ?
Mu
Messages : 15
Inscription : sam. 09/avr./2005 15:28

Message par Mu »

Je ressors ce vieux topic car j'ai le même problème et je n'arrive pas à le résoudre. La souris ne veut pas sortir de la fenêtre créée avec OpenWindowedScreen.

Code : Tout sélectionner

If InitMouse()=0 Or InitSprite()=0 Or InitKeyboard()=0
    MessageRequester("Erreur", "DirectX 7 ou ultérieur indisponible !", 0)
    End
EndIf

If OpenWindowedScreen(OpenWindow(0,0,0,640, 480,0,"Window"),0,0,640, 480,0,0,0)
    SetFrameRate(60)
    UsePNGImageDecoder()
    LoadSprite(2, "Images\Pointeur.png", 0)
    TransparentSpriteColor(2, 255,0, 0)
    Repeat
        FlipBuffers()
        If IsScreenActive()=0
            ReleaseMouse(1)
        Else
            ReleaseMouse(0)
            ExamineMouse()
            mousX=MouseX()
            mousY=MouseY()
        EndIf

        ClearScreen(0,0,0)
        
        DisplayTransparentSprite(2, mousX, mousY)
        
        ExamineKeyboard()
    Until KeyboardPushed(#PB_Key_Escape)
Else
    MessageRequester("Erreur", "Impossible d'ouvrir un ecran 640x480", 0)
EndIf
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

tout dépend ce que tu veux faire ,tu tiens absolument à mettre un sprite à la position de la souris ? précise ce que tu cherches à faire , sinon tu peux faire ça :

Code : Tout sélectionner

If InitSprite()=0 Or InitKeyboard()=0
  MessageRequester("Erreur", "DirectX 7 ou ultérieur indisponible !", 0)
  End
EndIf

If OpenWindowedScreen(OpenWindow(0,0,0,640, 480,0,"Window"),0,0,640, 480,0,0,0)
  SetFrameRate(60)
  Repeat
    While WindowEvent() : Wend
    FlipBuffers()
 
    ClearScreen(0,0,0)
    
    StartDrawing(WindowOutput())
    FrontColor(255,255,255)
    DrawingMode(1)
    DrawText("Position de la souris = " + Str(WindowMouseX()) + " / " + Str(WindowMouseY()))
    StopDrawing()
    
    ExamineKeyboard()
  Until KeyboardPushed(#PB_Key_Escape)
Else
  MessageRequester("Erreur", "Impossible d'ouvrir un ecran 640x480", 0)
EndIf 
si tu tiens à mettre un sprite tu peux faire un truc de ce genre

Code : Tout sélectionner

If InitSprite()=0 Or InitKeyboard()=0
  MessageRequester("Erreur", "DirectX 7 ou ultérieur indisponible !", 0)
  End
EndIf

If OpenWindowedScreen(OpenWindow(0,0,0,640, 480,0,"Window"),0,0,640, 480,0,0,0) = 0
  MessageRequester("Erreur", "Impossible d'ouvrir un ecran 640x480", 0)
  End
EndIf 
SetFrameRate(60)

CreateSprite(2,16,16)
StartDrawing(SpriteOutput(2))
Box(0,0,16,16,$0000FF)
StopDrawing()  

Repeat
  While WindowEvent() : Wend
  FlipBuffers()

  ClearScreen(0,0,0)
  If WindowMouseX()>0 And WindowMouseY()>0
    showcursor_(0)
    DisplaySprite(2,WindowMouseX(),WindowMouseY())
  Else
    showcursor_(1)
  EndIf
  StartDrawing(WindowOutput())
  FrontColor(255,255,255)
  DrawingMode(1)
  DrawText("Position de la souris = " + Str(WindowMouseX()) + " / " + Str(WindowMouseY()))
  StopDrawing()
  
  ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Code : Tout sélectionner

Je ressors ce vieux topic car j'ai le même problème et je n'arrive pas à le résoudre. La souris ne veut pas sortir de la fenêtre créée avec OpenWindowedScreen.
c'est normal si tu utilises InitMouse() !

Dans une fenêtre OpenWindowedScreen, il faut gérer la souris avec les fonction Window et pas les fonction jeux.

Donc :
WindowMouseX()
WindowMouseY()


et pas MouseX(), MouseY()
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Répondre