2009-03-07 11 views
0

Ich erstelle eine Windows Mobile benutzerdefinierte SIP und während der Benutzer drückt oder "schwebt" über eine Schaltfläche auf der Tastatur zeichne ich das entsprechende ausgewählte Bild (iPhone-esque) auf dem Bildschirm DC mit :: GetDC (NULL). Es wird in Win32 C++ entwickelt.Bildschirm neuzeichnen nach dem Zeichnen auf Bildschirm DC C++

Mein Problem ist, dass ich nie den Bildschirm bekommen kann, um sich neu zu streichen, den vorher gezeichneten Schlüssel löschend. Ich habe alles versucht, um es zu erzwingen, :: RedrawWindow() mit allen verschiedenen Kombinationen von Params mit NULL oder einer der Funktionen Get..Window als HWND, und alle Combo Flags (INVALIDATE | UPDATENOW | ERASENOW | ALLCHILDREN usw.). Ich habe auch versucht, das Rect ungültig zu machen und ein Repaint der zugrundeliegenden App mit :: GetActiveWindow und :: GetForegroundWindow, Variationen mit :: GetDesktopWindow, etc. zu erzwingen. Ich habe im Grunde keine Ideen mehr und es ist das letzte, was mich davon abhält Verwenden Sie es auf meinem Windows Mobile-Gerät. Hat jemand irgendwelche Ideen? Jede Hilfe würde sehr geschätzt werden.

Ich habe einige Screenshots zur Veranschaulichung meines Dilemmas beigefügt.

Before Screenshot
After Screenshot

Before http://img13.imageshack.us/img13/9861/cezoom1.pngAfter http://img3.imageshack.us/img3/7481/cezoom2.png

Vielen Dank im Voraus!

Antwort

1

Anstatt in den Hintergrund DC zu zeichnen, warum erstellen Sie nicht ein temporäres Fenster und zeichnen in das? Wenn Sie das Fenster zerstören, sollte der Hintergrund automatisch neu gezeichnet werden.

Ich rate nur, weil ich Windows Mobile nicht kenne, aber es könnte sein, dass Windows die letzte Sache, die in den DC gezeichnet wurde, zwischenspeichert und es jedes Mal neu erstellt, wenn Sie das Fenster ungültig machen.

+0

Das ist ein interessanter Ansatz, ich werde es einen Versuch geben danke. Ich glaube nicht, dass der DC Caching ist, weil das Problem nur auftritt, wenn die Buttons außerhalb meines sip-Panels (darüber) gezeichnet werden. Ich habe dieses Problem nicht mit Schaltflächen im Panel, obwohl sie auch auf den Bildschirm gezogen werden. –

+0

Wenn ich Buttons innerhalb des Panels sage, meine ich die blau ausgewählten Popup-Buttons. (alle anderen Tasten werden zu einem Bitmap gezeichnet und dann auf die DC des Bildschirms meines Bildschirms und nicht auf dem Bildschirm) –

1

Haben Sie versucht, InvalidateRect auf dem Bildschirm hWnd?

+0

von Bildschirm hWnd Ich nehme an, Sie meinen: GetDesktopWindow(), richtig? Wenn du das meinst dann habe ich ja alle üblichen Anrufe gegen den Bildschirm wnd ausprobiert. –