| Autor |
Nachricht |
ice86ac
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.03.2012
Beiträge: 6
|
ice86ac Mitglied
15:45:15 29.03.2012 Titel: |
Bildschirm kurz aufblinken lassen |
Zitieren |
Hallo Zusammen,
ich habe ein kleines Problem und bitte hier um einen Gedankenanstoß.
Ich programmiere mit C++ und Qt ein kleines Widget, welches nach Betätigung eines Buttons die Zeit misst. Dies ist kein Problem.
Beim Betätigen des Buttons soll mein Bildschirm aber einmal ganz kurz in einer Farbe (beispielsweise grün) komplett aufleuchten.
Dieses aufblinken soll als Synchronisationszeitpunkt für einen Screenrecorder dienen. Dies soll in weiteren Schritten mit einer Eye-Tracking-Kamera überlagert werden, was jetzt aber nichts zur Sache tut.
Also? Habt ihr eine Idee wie man den Bildschirm für eine kurze Zeit, 0,2s zB, grün macht?
Vielen Dank schonmal! |
|
|
|
 |
C++ Forumbot
Forumbot
Benutzerprofil
Anmeldungsdatum: 29.02.2004
Beiträge: 17120
|
C++ Forumbot Forumbot
15:50:26 29.03.2012 Titel: |
|
Zitieren |
|
 |
Thorgrim
Unregistrierter
|
Thorgrim Unregistrierter
21:45:51 29.03.2012 Titel: |
|
Zitieren |
Kannst du nicht einfach ein "Popupfenster" mit der Hintergrundfarbe erzeugen, das den kompletten Bereich des von der App aktuell verwendeten Monitors bedeckt? Kenne mich mit Qt leider zu wenig aus.
Oder eben die OS-Funktionen. Für Windows: Sperr das Desktopfenster gegen Updates (LockWindowUpdate), hole dir den DC per GetDCEx mit den Flags DCX_CACHE | DCX_LOCKWINDOWUPDATE und fülle einfach ein Rechteck in diesem Bereich. Anschließend ein InvalidateRect/RedrawWindow. Für wenige 100 ms sollte das auch gut klappen (bei Taskswitches wird es aber vermutlich versagen).
Der Nachteil wäre natürlich, dass dies für alle unterstützten OSs implementiert werden müsste. Also am Besten doch ein Popupfenster. |
|
|
|
 |
ice86ac
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.03.2012
Beiträge: 6
|
ice86ac Mitglied
22:22:30 29.03.2012 Titel: |
|
Zitieren |
Hmm n Popupfenster, welches sich automatisch wieder schließt, wäre eine Maßnahme! Danke für die Idee!
Das mit den Windowsbordmitteln hab ich nicht ganz verstanden. Das Programm soll aber auch nur unter Windows laufen.
Gibt es denn keine Möglichkeit mein Vorhaben direkt aus dem C++ Code anzusteuern?
Irgendwie die Pixel des Bildschirms anzusprechen und dann "färben"? |
|
|
|
 |
Thorgrim
Unregistrierter
|
Thorgrim Unregistrierter
22:31:06 29.03.2012 Titel: |
|
Zitieren |
Naja, für Windows hätte ich mir im Zweifel sowas gedacht:
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | void PaintDesktop(COLORREF color, unsigned ms = 300)
{
HWND hwnd;
if(LockWindowUpdate(hwnd = GetDesktopWindow()))
{
HDC hdc = GetDCEx(hwnd, NULL, DCX_CACHE|DCX_LOCKWINDOWUPDATE);
// Annahme: Primärer Monitor, ansonsten mit MonitorFromWindow & GetMonitorInfo arbeiten
RECT client = {0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN)};
SetDCBrushColor(hdc, color);
FillRect(hdc, &client, static_cast<HBRUSH>(GetStockObject(DC_BRUSH)));
RedrawWindow(hwnd,NULL,NULL,RDW_INVALIDATE);
Sleep(ms);
ReleaseDC(hwnd, hdc);
InvalidateRect(hwnd,0,true);
LockWindowUpdate(NULL);
}
} | |
Oder notfalls pollen und FillRect/RedrwWindow durch
| C++: | unsigned end = GetTickCount()+ms;
while(unsigned cur = GetTickCount() < end)
{
LockWindowUpdate(hwnd);
FillRect(hdc, &client, static_cast<HBRUSH>(GetStockObject(DC_BRUSH)));
RedrawWindow(hwnd,NULL,NULL,RDW_INVALIDATE);
} | |
ersetzen.
Aber wie geschrieben: Ein Popupfenster wäre die bessere Lösung. |
|
|
|
 |
ice86ac
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.03.2012
Beiträge: 6
|
ice86ac Mitglied
14:30:52 11.04.2012 Titel: |
|
Zitieren |
Windows.h ist eingebunden, trotzdem bekomme ich folgende zwei Fehlermeldungen:
SetDCBrushColor was not declared in this scope sowie
DC_BRUSH was not declared in this scope
Um was gehts da genau?
Tut mir leid, aber mit der Windows API hab ichs wirklich garnicht -.-
EDIT: Okay, SetDCBrushColor hab ich nochmal neu initialisiert. Aber mit dem DC_BRUSH häng ich irgendwie aufm Schlauch... |
Zuletzt bearbeitet von ice86ac am 17:15:01 11.04.2012, insgesamt 2-mal bearbeitet |
|
 |
$-BootLag-$
Mitglied
Benutzerprofil
Anmeldungsdatum: 09.10.2010
Beiträge: 192
|
$-BootLag-$ Mitglied
19:46:40 11.04.2012 Titel: |
|
Zitieren |
Ich würde das hanze viel einfacher angehen:
Schnell eine kleine .bat Datei mit dem Inhalt @echo off und color XX (XX=Farbcode) im Vollbildschirmmodus starten und fertig. Funktioniert als Gag in der Schule wunderbar^^ |
|
|
|
 |
ice86ac
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.03.2012
Beiträge: 6
|
ice86ac Mitglied
12:10:59 13.04.2012 Titel: |
|
Zitieren |
| $-BootLag-$ schrieb: | Ich würde das hanze viel einfacher angehen:
Schnell eine kleine .bat Datei mit dem Inhalt @echo off und color XX (XX=Farbcode) im Vollbildschirmmodus starten und fertig. Funktioniert als Gag in der Schule wunderbar^^ |
Wie meinst du das genau? Könntest du mir vllt ne PM schreiben?
Wie schauts denn mit dem DC_BRUSH aus? Hat keiner Rat für mich? |
|
|
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|