InvalidateRect() - Desktop reagiert nicht
-
wie soll das mit ScreenToClient gehen?
die msdn bietet ja 2 Möglichkeiten zu der Funktion:
1.:
msdn schrieb:
void ScreenToClient( LPPOINT lpPoint ) const;lpPoint
Points to a CPoint object or POINT structure that contains the screen coordinates to be converted.damit habe ich es versucht.
ich habe es so versucht:
HWND editor=FindWindow(NULL, L"Unbenannt - Editor"); RECT rect; rect.left=110; rect.top=110; rect.right=220; rect.bottom=220; //konvertieren: POINT oben_links; oben_links.x=rect.left; oben_links.y=rect.top; POINT unten_rechts; unten_rechts.x=rect.right; unten_rechts.y=rect.bottom; ScreenToClient(editor, static_cast<LPPOINT>(&oben_links)); ScreenToClient(editor, static_cast<LPPOINT>(&unten_rechts)); rect.left=oben_links.x; rect.top=oben_links.y; rect.right=unten_rechts.x; rect.bottom=unten_rechts.y; //Rechteck löschen: bool success=InvalidateRect(editor, &rect , TRUE);sehr umständlich und auch nicht wirklich erfolgreich, hier mal ein screen:
http://img64.imageshack.us/img64/320/fehlernachkonvertierung.png
dann gibt es da laut msdn noch ne 2. Möglichkeit die viel einfacher wäre, aber der Compiler (MS Visual C++ 2008 EXpress Edition) leider nicht zu kennen scheint:
msdn schrieb:
void ScreenToClient( LPRECT lpRect ) const;lpRect
Points to a CRect object or RECT structure that contains the screen coordinates to be converted.wenn ich es damit versuche sagt der Compiler:
Microsoft Visual C++ 2008 Express Edition schrieb:
error: ScreenToClient(). Konvertierung des Parameters 2 von RECT+ in LPPOINT nicht möglich.
deshalb scheint er diese Variante nicht zu kennen
.wie kann ich es denn nun richtig machen? ein kleines Codebeispiel wäre schön

danke schonmal,
andi01.
-
Du hast da in der MSDN scheinbar die MFC-Version gefunden.
Was du suchst ist:
http://msdn.microsoft.com/en-us/library/dd162952(VS.85).aspx
-
wie muss ich es denn richtig machen?
ich mache es momentan so:
//konvertieren: POINT oben_links; oben_links.x=110; oben_links.y=110; POINT unten_rechts; unten_rechts.x=220; unten_rechts.y=220; ScreenToClient(editor, static_cast<LPPOINT>(&oben_links)); ScreenToClient(editor, static_cast<LPPOINT>(&unten_rechts)); rect.left=oben_links.x; rect.top=oben_links.y; rect.right=unten_rechts.x; rect.bottom=unten_rechts.y; //Rechteck löschen: bool success=InvalidateRect(editor, &rect , TRUE);doch das Ergebnis bleibt gleich(siehe Screenshot). was ist an meinem Code denn falsch?
mfg,
andi01.
-
Sieht richtig aus.
Hast Du Vista/Win7? Da könnte ich mir so ein Verhalten vorstellen...
-
ne win XP SP2, aber das ergebnis sieht immernoch aus wie am 1. screen.
weiß irgendjemand woran das liegt und v.a. was ich besser/anders machen kann?
edit:
-Könnte das vielleicht daran liegen?:
-ich ermittle den Device Context mit GetWindowDC(). sollte ich vllt lieber GetDC() nehmen?
-sollte ich vllt ClientToScreen() statt ScreenToClient() nehmen?
danke schonmal,
andi01.
-
irgendwie muss das doch hinzukriegen sein... immerhin kann man eigentlich bei allen Zeichenprogrammen das Gezeichnete löschen.
-
andi01 schrieb:
irgendwie muss das doch hinzukriegen sein... immerhin kann man eigentlich bei allen Zeichenprogrammen das Gezeichnete löschen.
Jo! Die zeicnen auch in ihre eigenen Fenster und nicht irgendwohin in andere Fenster...
-
Martin Richter schrieb:
Jo! Die zeicnen auch in ihre eigenen Fenster und nicht irgendwohin in andere Fenster...
das will ich ja eigentlich auch machen mit einem eigenen transparenten Fenster über dem Desktop, aber deswegen wird sich wohl kaum etwas an der Umrechnung der Koordinaten ändern, oder?
mein Problem war ja genau diese Umrechnung(siehe Screenshot).
mfg,
andi01.
-
Was ist daran so schwer. Es gibt Client Koordinaten und Fenster Koordinaten.
Was für Koordinaten willst Du denn nun wohin umrechnen?
Entsprechende nimmst Du ClientToScreen oder ScreenToClient.
-
Martin Richter schrieb:
Was ist daran so schwer.
das problem ist dass ich die Koordinaten bereits mit ScreenToClient() (testweiese sogar schon mit ClientToScreen() ) umgerechnet habe und aber, wie man am screenshot deutlich erkennen kann, die Umrechnung irgendwie nicht richtig zu funktionieren scheint weil das testrechteck nur teilweise gelöscht wird.
mfg,
andi01.