Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

WinApi: Fenster sofort neu zeichnen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Dominik



Anmeldungsdatum: 22.12.2004
Beiträge: 172

BeitragVerfasst am: 13.11.2005, 10:24    Titel: WinApi: Fenster sofort neu zeichnen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 14.11.2005, 08:59    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dominik



Anmeldungsdatum: 22.12.2004
Beiträge: 172

BeitragVerfasst am: 14.11.2005, 21:10    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Dominik



Anmeldungsdatum: 22.12.2004
Beiträge: 172

BeitragVerfasst am: 19.11.2005, 18:13    Titel: Antworten mit Zitat

Hallo,
danke für die Hilfe!
Ich hab das mit der RECT-Struktur ausprobiert, aber er schreibt immer einen Fehler mit dem Kopf durch die Mauer wollen : 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? traurig 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
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 19.11.2005, 18:17    Titel: Antworten mit Zitat

Hallo.

Hast du auch die windows.bi includiert??

Code:
#include windows.bi


Michael
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Dominik



Anmeldungsdatum: 22.12.2004
Beiträge: 172

BeitragVerfasst am: 19.11.2005, 23:37    Titel: Antworten mit Zitat

Kopf schütteln 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


weinen Was mach ich denn falsch? Er zeichnet die Uhr einfach nicht neu....
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
tilli



Anmeldungsdatum: 10.09.2005
Beiträge: 73

BeitragVerfasst am: 20.11.2005, 20:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz