Seite 1 von 1

Gestrichelte Window Resizelinie...

Verfasst: 15.05.2005 17:52
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:

Verfasst: 15.05.2005 19:42
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.

Verfasst: 16.05.2005 09:47
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

Verfasst: 16.05.2005 19:40
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

Verfasst: 16.05.2005 20:26
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 


Verfasst: 16.05.2005 20:50
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