Dessiner dans une region

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

Dessiner dans une region

Message par lepiaf31 »

Bonjour
Je cherche à dessiner dans une région définie par CreateRoundRectRgn_() grace à FillRgn_() mais je n'y arrive pas :( .

Voila mon code:

Code : Tout sélectionner

OpenWindow(0, 0, 0, 500, 400, "test", #PB_Window_ScreenCentered|#PB_Window_BorderLess)
Rgn = CreateRoundRectRgn_(50, 0, 500, 400, 30, 30)
;SetWindowRgn_(WindowID(0), Rgn, #True)
hDC = CreateCompatibleDC_(GetWindowDC_(WindowID(0)))
hBrush = CreateSolidBrush_(RGB(255,0,0))
Debug FillRgn_(hDC, Rgn, hBrush)


Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Voici un code qui fonctionne:

Code : Tout sélectionner

OpenWindow(0, 0, 0, 500, 400, "test", #PB_Window_ScreenCentered|#PB_Window_BorderLess)
Rgn = CreateRoundRectRgn_(50, 0, 500, 400, 30, 30) 
;SetWindowRgn_(WindowID(0), Rgn, #True)
hDC = GetDC_(WindowID(0))
hBrush = CreateSolidBrush_(RGB(255,0,0))
Debug FillRgn_(hDC, Rgn, hBrush)
ReleaseDC_(WindowID(0),hdc)


Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

Message par lepiaf31 »

Merci beaucoup =)

Le probleme maintenant c'est que je ne peux pas mettre de gadget dans la region colorée :( :

Code : Tout sélectionner

Procedure Paint()
  Rgn = CreateRoundRectRgn_(50, 0, 500, 400, 30, 30)
  hDC = GetDC_(WindowID(0))
  hBrush = CreateSolidBrush_(RGB(255,0,0))
  FillRgn_(hDC, Rgn, hBrush)
  ReleaseDC_(WindowID(0),hdc)
EndProcedure

OpenWindow(0, 0, 0, 500, 400, "test", #PB_Window_ScreenCentered|#PB_Window_BorderLess)
Paint()
ButtonGadget(1, 150, 150, 100, 20, "test")

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      End
    Case #PB_Event_Repaint
      Paint()
  EndSelect
ForEver
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Code : Tout sélectionner

Global hBrush.l,Rgn.l

hBrush = CreateSolidBrush_(RGB(255,0,0))
Rgn = CreateRoundRectRgn_(50, 0, 500, 400, 30, 30)

Procedure WindowCallback(window , message, wParam, lParam)
  res=#PB_ProcessPureBasicEvents
 
  Select message
    Case #WM_PAINT
      hDC=BeginPaint_(window,ps.PAINTSTRUCT)
      FillRgn_(hDC, Rgn, hBrush)
      EndPaint_(window, ps)
      ProcedureReturn 0

  EndSelect
  ProcedureReturn res
EndProcedure 

OpenWindow(0, 0, 0, 500, 400, "test", #PB_Window_ScreenCentered|#PB_Window_BorderLess)

ButtonGadget(1, 150, 150, 100, 20, "test") 

SetWindowCallback(@WindowCallback()) 

Repeat
  event=WaitWindowEvent()
  Select event  
    Case #PB_Event_CloseWindow
      End

  EndSelect
ForEver 
cirederff
Messages : 54
Inscription : ven. 15/mai/2009 19:57

Message par cirederff »

Bonsoir,
Juste une petite question au passage:

Vous prenez où le CreateSolidBrush_() et le CreateRoundRectRgn_() et les autres dans le genre :!:

Je suis sous PB 4.31 et quand je fais F1, rien.... :?
je me doute que je doit louper queque chose mais quoi ?
merci a +
Fred
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Dans Purebasic la majorité des API sont déclarés, pour les utiliser il suffit de taper le nom de la fonction suivi du signe "_".

Pour avoir des informations sur la fonction, tu vas à cette adresse:
http://msdn.microsoft.com/en-us/library/default.aspx

et là tu écrit le nom de la fonction et ça te donnera différents liens qui te donneront les informations nécessaires à l'utilisation de la fonction!
cirederff
Messages : 54
Inscription : ven. 15/mai/2009 19:57

Message par cirederff »

Merci pour cette rapidité,mais bon , je n' en suis pas encore à ce stade
Répondre