Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Dominik
Anmeldungsdatum: 22.12.2004 Beiträge: 172
|
Verfasst am: 13.11.2005, 11:24 Titel: WinApi: Fenster sofort neu zeichnen |
|
|
Hallo!
Wie kann ich ein Fenster sofort wieder neu zeichnen?
Geht das mit RedrawWindow? Wenn ja, wie erstelle ich in FB Rect-Strukturen? |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 14.11.2005, 09:59 Titel: |
|
|
Hi,
evtl. hilft dir das Beispiel 'bitmap.bas' aus examples\windows\gui (FB 0.15b).
Die RECT-Struktur ist dort benutzt worden.
Code: | dim as RECT rct
with rct
.left = x - 8
.top = y - 8
.right = .left + SCALE_CALC( logoinfo->bmiHeader.biWidth, scale ) + 8 + 8
.bottom = .top + SCALE_CALC( logoinfo->bmiHeader.biHeight, scale ) + 8 + 8
end with |
Gruß
Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
Dominik
Anmeldungsdatum: 22.12.2004 Beiträge: 172
|
Verfasst am: 14.11.2005, 22:10 Titel: |
|
|
Hallo,
ich habe ein Screen Window erstellt, die Window Handle geholt und die WndProc mit einer von mir erstellte Funktion ausgetauscht.
Dadurch konnte ich z.B. bezwecken, dass ich auch WM_CLOSE Nachrichten, die normal an die WndProc des Screen-Fensters gehen, auszuwerten. Was ich auch wollte war, dass der Benutzer das Fenster nicht mehr mit ALT+ENTER maximieren kann.
Da mein Programm eine Analoguhr werden soll, habe ich dann einen Timer erstellt, der jede Sekunde die Uhr neu zeichnen soll.
Das funtioniert auch gut, solange man das Fenster nicht verschiebt, dann bewegt sich nichts mehr. Besonders schlimm wird es, wenn man das Fenster teilweise über den Bildschirmrand hinausverschiebt und wieder ins Bild holt und die Maus weiter gedrückt hält: das ganze Bild ist verschwommen.
Daher meine Fragen:
Wie verhindere ich das "verschwimmen" der Farben?
Wie erreiche ich, dass die Uhr auch neu gezeichnet wird, wenn das Fenster verschoben wird? |
|
Nach oben |
|
|
Dominik
Anmeldungsdatum: 22.12.2004 Beiträge: 172
|
Verfasst am: 19.11.2005, 19:13 Titel: |
|
|
Hallo,
danke für die Hilfe!
Ich hab das mit der RECT-Struktur ausprobiert, aber er schreibt immer einen Fehler : Element not defined, found: 'Rct.left'
Code: |
Dim Rct As RECT
With Rct
.left = 10
.bottom = 20
.top = 10
.right = 30
End With
|
Ist das überhaupt möglich, ein Fenster während dem Verschieben neu zu zeichnen? Die meiste funktionen senden ja nur WM_PAINT an das Fenster, was aber nicht funktioniert, da WM_MOVING bei der Auswertung durch WndProc immr Vorrang hat.... |
|
Nach oben |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 19.11.2005, 19:17 Titel: |
|
|
Hallo.
Hast du auch die windows.bi includiert??
Code: | #include windows.bi |
Michael _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
|
Dominik
Anmeldungsdatum: 22.12.2004 Beiträge: 172
|
Verfasst am: 20.11.2005, 00:37 Titel: |
|
|
Ich habe gerade meinen Fehler bemerkt: Statt left muss nleft stehen.....
Es geht aber trotzdem nicht:
Code: |
(.....)------Auszug aus WndProc(.....)
Dim Rec As RECT
With Rec
.nLeft = 1
.nLeft = 1
.nBottom = 1
.nTop = 1
End With
Select Case (message)
Case WM_MOVING
RedrawWindow(ScreenWindow, Rec, null, RDW_INVALIDATE or UPDATENOW)
UpdateWindow(ScreenWindow)
End Select
|
Was mach ich denn falsch? Er zeichnet die Uhr einfach nicht neu.... |
|
Nach oben |
|
|
tilli
Anmeldungsdatum: 10.09.2005 Beiträge: 73
|
Verfasst am: 20.11.2005, 21:01 Titel: |
|
|
Moin,
Es ist schon Richtig,dass ein 'Redraw' das Fenster neu Zeichnet - nur wer Ruft es auf? (ich denke das ist dein Problem?) Der Redraw-Befehl ist einer aus der Rubrik der der Durchgeleiteten Befehle - soweit geht mein Wissen. Man müsste also bei'm Beenden des Durchlaufs in die Befehls-Kette(c++-Programmierung, siehe Funktionen wie Zeiger bei'm Aufruf: SendeProgramm->Empfangsprogramm) einen Redraw einbauen - wie auch immer das abgeht. Ob und Wie das mit Freebasic geht - weis isch nicht.
Ich (mit Win 98 System)habe da sowas unter "Eigenschaften von Anzeige" (rechte Maustaste auf Hintergrund) gefunden: unter "Effekte" gibt es da ein "Fensterinhalt bei'm Verschieben Anzeigen". Möglicherweise muss man es ausmachen, das Win (ich gehe mal dvobn aus, dass du ein MS-System hast) bei 'm Verschieben eine Kopie des Alten Fensters Mitschleift.
Möglicherweise muss auch am "Fenster,menüs,Listen Animieren" ein Häkchen geändert werden. Das ist aber auch nur so eine Idee ...
Hoffe es Hilft was,
CU2
Tilli |
|
Nach oben |
|
|
|