Einen "Auswahlrahmen" um ein Fenster packen

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Einen "Auswahlrahmen" um ein Fenster packen

Beitrag von Tafkadasom2k5 »

Heyho allerseits :)

Ich habe ein Childwindow, und es ist Borderless. Ich möchte,
wenn das Fenster den Fokus bekommt, ihm einen Auswahlrahmen verpassen (so in der Art wie beim Dialog-Editor der Rahmen, der bei einem aktivierten Gagdet erscheint.)

Jetzt experimentiere ich die ganze Zeit mit denS tyles herum, aber irgendwie funktioniert nichts davon so richtig.

Code: Alles auswählen

SetWindowLong_(WindowID(0),#GWL_STYLE,GetWindowLong_(WindowID(0),#GWL_STYLE) | #WS_BORDER)
Irgendwie will dieser Style nicht auf mein Childwindow passen...

Hat irgendjemand einen Ratschlag, was für einen Style oder ähnliches ich dem Fenster hinzufügen muss, amit es "aktiv" aussieht, obwohl es keine Caption und co hat?

Gr33tz
Tafkadasom2k5
Zuletzt geändert von Tafkadasom2k5 am 24.10.2006 08:41, insgesamt 1-mal geändert.
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Code: Alles auswählen

OpenWindow(0,0,0,400,300,"untitled",#WS_OVERLAPPEDWINDOW | 1)
SetWindowColor(0,$FF8844)

OpenWindow(1,20,20,240,140,"",#WS_CHILD,WindowID(0))
CreateGadgetList(WindowID(1))
TextGadget(0,80,60,100,20,"CLICK MICH !!")

Repeat 
	EventID = WaitWindowEvent()
	
	If EventID = #WM_LBUTTONDOWN
		Select EventWindow()
			Case 0
			SetWindowLong_(WindowID(1),#GWL_STYLE,#WS_CHILD | #WS_VISIBLE)				
			SetWindowPos_(WindowID(1),0,0,0,0,0,#SWP_NOMOVE | #SWP_NOSIZE | #SWP_FRAMECHANGED)
		
			Case 1
			SetWindowLong_(WindowID(1),#GWL_STYLE,#WS_CHILD | #WS_VISIBLE | #WS_BORDER)
			SetWindowPos_(WindowID(1),0,0,0,0,0,#SWP_NOMOVE | #SWP_NOSIZE | #SWP_FRAMECHANGED)
		EndSelect
	EndIf
Until EventID = 16
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Hey, scheint zu funktionieren :)
Eine Frage nur-
warum muss man dieses

Code: Alles auswählen

SetWindowPos_(WindowID(1),0,0,0,0,0,#SWP_NOMOVE | #SWP_NOSIZE | #SWP_FRAMECHANGED)
dazu einfügen? Die WinAPI sagt mir zwar, dass man damit das Fenster aktualisieren kann (und durch die Flags die Position und Größe nicht verändert werden)- aber warum kann man dann nicht einfach "UpdateWindow(WindowID(1))" machen?
Weil das scheint in der Konstellation nämlich nicht zu funktionieren...

Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag von real »

Weil Du nicht den Inhalt des Fensters bzw. Gadgets, sondern dessen Rahmen (=Style) geändert hast.
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Ah, alles klar :)

Was ist das denn für ein Border-Style der auftritt, wenn man ein Objekt wie zum Beispiel bei PAINT den Auswahlrahmen hat?
Ich brauche um mein Fenster nämlich auch so ein Auswahlrahmen...
So einer mit Punkten an den markanten Ecken um es dort zu strecken o.Ä.

Oder muss ich mir sowas "selber basteln"?

Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Tafkadasom2k5 hat geschrieben: Was ist das denn für ein Border-Style der auftritt, wenn man ein Objekt wie zum Beispiel bei PAINT den Auswahlrahmen hat?
Der Rahmen bei Paint ist eine Kombination aus FrameRect() und DrawFocusRect(). Die Eckpunkte und die Funktionalität des Skalierens sind entweder OLE Objekte oder von Hand geschriebene Routinen.
Tafkadasom2k5 hat geschrieben:Oder muss ich mir sowas "selber basteln"?
Wenn es keine OLE Objekte sind ja. Schau dich mal ein wenig auf MSDN um.
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

..hey, so langsam verstehe ich.. nur so wirklich vollständig auch noch nicht... ;)

Code: Alles auswählen

   DC_hWnd = GetDC_(hWnd)
   hBrush = CreateHatchBrush_(#HS_CROSS, #BLACK)
   GetWindowRect_(hWnd,rHwnd)
   FrameRect_(DC_hWnd, rHwnd, hBrush)
   DrawFocusRect_(DC_hWnd,rHwnd)
   
   BringWindowToTop_(hWnd)
...aber da tut sich nichts..?

Habe ich am System was falsch verstanden? Oder habe ich das DC-System völlig missverstanden?

Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

hmm .. geht doch

Code: Alles auswählen

rHWND.rect
hwnd=OpenWindow(0,0,0,400,400,"aha")
CreateGadgetList(WindowID(0))
DC_hWnd = GetDC_(hWnd)
hBrush = CreateHatchBrush_(#HS_CROSS, #Red)
GetWindowRect_(hWnd,rHwnd)
;etwas Behandlung damit man was sieht
rHWND\left+5
rHWND\top+5
rHWND\right-15
rHWND\bottom-100 ;etwas mehr, da die Titelzeile ja auch noch dabei ist

Repeat
  FrameRect_(DC_hWnd, rHwnd, hBrush)
  ;DrawFocusRect_(DC_hWnd,rHwnd) ; ist mir toomuch
  ;BringWindowToTop_(hWnd)           ; brauch so nicht
Until WaitWindowEvent()=#PB_Event_CloseWindow
das in ein Callback und die Welt is ok
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Antworten