Gestrichelte Window Resizelinie...

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
MJP
Beiträge: 72
Registriert: 14.10.2004 18:45
Wohnort: Nähe Frankfurt/Hessen
Kontaktdaten:

Gestrichelte Window Resizelinie...

Beitrag von MJP »

Gude..., :mrgreen:

Ich hab folgendes Problem:
Ich möchte das der User mein Window resizen kann aber nicht in Echtzeit sondern wie hier BILD.
Das Window hat einen Hintergrundbild das frei Resizebar ist. Aber leider hängt es sich immer noch kurzer wartezeit oder zu schnellem Resizen auf :cry:
Hab auch von dem Fenster ein Screenshot gemacht ^^ BILD Macht irgendwie Spaß :roll:...

Also wie bekomme ich so eine gestrichelte Resizelinie hin?

Thx 4 Help MJP :allright:
Alle Reschtsreib feler sind beabsichticht unn kosten nichs echtra ;-D
Visit ---|> http://www.Komani.de/
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Bei Windows XP (und vermutlich auch 2000) ist das in den Optionen darzustellen, ob das Größe-Anpassen in Echtzeit passieren soll oder eben durch diese gestrichelten Linien. (System und dort auf Erweitert)
Das nur zur Info, wie man diese Eigenschaft speziell für sein Programm abändern kann, weiß ich allerdings nicht.
Benutzeravatar
FGK
Beiträge: 249
Registriert: 09.01.2005 14:02
Computerausstattung: i5-4430 CPU / 8GB RAM
GeForce GT630
Windows 10 Home / 64-bit
Wohnort: Augsburg

Beitrag von FGK »

Hi MJP

dein gestricheltes Rechteck kriegst du mit DrawFocusRect_ hin.
Hier ein auszug der Win32 Reference:

The DrawFocusRect function draws a rectangle in the style used to indicate that the rectangle has the focus.

BOOL DrawFocusRect(

HDC hDC, // handle to device context
CONST RECT *lprc // pointer to structure for rectangle
);


Parameters

hDC

Identifies the device context.

lprc

Points to a RECT structure that specifies the logical coordinates of the rectangle.



Return Values

If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks

Because DrawFocusRect is an XOR function, calling it a second time with the same rectangle removes the rectangle from the screen.
This function draws a rectangle that cannot be scrolled. To scroll an area containing a rectangle drawn by this function, call DrawFocusRect to remove the rectangle from the screen, scroll the area, and then call DrawFocusRect again to draw the rectangle in the new position.

See Also

FrameRect, RECT
Hoffe das hilft dir etwas weiter


Gruß

FGK
Benutzeravatar
MJP
Beiträge: 72
Registriert: 14.10.2004 18:45
Wohnort: Nähe Frankfurt/Hessen
Kontaktdaten:

Beitrag von MJP »

Erstma danke an euch beide! :allright:

Jetzt dazu noch ein paar fragen...
Muss ich das ganze als Callback machen?
Was ist das HDC? :?

[Edit] Ok das mit dem HDC hab ich gelöst...

Code: Alles auswählen

HDC=GetDC_(hwnd)
Bin jetzt weiter gekommen...
Aber warum geht das so nicht?

Code: Alles auswählen

hwnd=OpenWindow(1,200,200,300,300,#PB_Window_SystemMenu | #PB_Window_SizeGadget,"TEST")

Repeat
Event=WaitWindowEvent()
    HDC=GetDC_(hwnd)
    DrawFocusRect_(HDC,RECT) 
Until Event=#PB_Event_CloseWindow
Thx 4 Help MJP
Alle Reschtsreib feler sind beabsichticht unn kosten nichs echtra ;-D
Visit ---|> http://www.Komani.de/
Benutzeravatar
FGK
Beiträge: 249
Registriert: 09.01.2005 14:02
Computerausstattung: i5-4430 CPU / 8GB RAM
GeForce GT630
Windows 10 Home / 64-bit
Wohnort: Augsburg

Beitrag von FGK »

Hi MJP,

hier ne kleine Spielerei - ev. nützt dir das ja was :D

Gruß

FGK

Code: Alles auswählen


If OpenWindow(0, 100, 200, 640,480,#PB_Window_SystemMenu|#PB_Window_WindowCentered , "PureBasic DrawFocusRect-Demo")
 
  hdc = GetDC_(WindowID(0)) 
  SetRect_(R.RECT,20,20,620,440)
  DrawFocusRect_(hdc,R)
  Repeat
    DrawFocusRect_(hdc,R)
    Select Dir
      Case 0
        R\top+2
        R\bottom-2
        R\left+2
        R\right-2
        If R\top>220 
          Dir =1
        EndIf  
      Case 1
        R\top-2
        R\bottom+2
        R\left -2
        R\right+2
        If R\top<20 
          Dir =0
        EndIf  
    EndSelect    
    DrawFocusRect_(hdc,R)
    If WindowEvent() = #PB_Event_CloseWindow  ; If the user has pressed on the close button
      Quit = 1
    EndIf
    Delay(10)  
  Until Quit = 1
  
EndIf
End 

Benutzeravatar
MJP
Beiträge: 72
Registriert: 14.10.2004 18:45
Wohnort: Nähe Frankfurt/Hessen
Kontaktdaten:

Beitrag von MJP »

Sieht echt fett aus :allright:
Den Rest bekomm ich jetzt wohl selber hin ^^
Wie ich diese Board liebe... :mrgreen:
THx 4 all MJP
Alle Reschtsreib feler sind beabsichticht unn kosten nichs echtra ;-D
Visit ---|> http://www.Komani.de/
Antworten