2009-03-07 6 views
0

Je crée un SIP personnalisé Windows Mobile et quand l'utilisateur presse ou "passe" sur un bouton du clavier, je dessine son image sélectionnée correspondante (iPhone-esque) à l'écran DC utilisant :: GetDC (NULL). Il est développé dans Win32 C++. Mon problème est que je ne peux jamais faire repeindre l'écran lui-même, en effaçant la clé précédemment dessinée. J'ai essayé tout ce que je pouvais penser pour le forcer, :: RedrawWindow() avec tous les différents combos de params utilisant NULL ou l'une des fonctions Get..Window comme HWND, et tous les combos de flags (INVALIDATE | UPDATENOW | ERASENOW ALLCHILDREN etc). J'ai également essayé d'invalider le rect et de forcer une repeinte de l'application sous-jacente en utilisant :: GetActiveWindow et :: GetForegroundWindow, des variations en utilisant :: GetDesktopWindow, etc. Je n'ai pratiquement plus d'idées et c'est la dernière chose qui me retient en l'utilisant sur mon appareil Windows Mobile. Quelqu'un a-t-il une idée? Toute aide serait grandement appréciée.Redessiner l'écran après avoir dessiné le DC C++ de l'écran

J'ai inclus quelques captures d'écran pour illustrer mon dilemme.

Before Screenshot
After Screenshot

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

Merci à l'avance!

Répondre

1

Plutôt que de dessiner en arrière-plan DC, pourquoi ne pas créer une fenêtre temporaire et dessiner dans cela? Lorsque vous détruisez la fenêtre, l'arrière-plan devrait être repeint automatiquement. Je ne fais que deviner, parce que je ne connais pas Windows Mobile, mais il se peut que Windows cache la dernière chose qui a été dessinée dans le DC et la repeigne chaque fois que vous invalidez la fenêtre.

+0

C'est une approche intéressante, je vais essayer. Je ne crois pas que le contrôleur de domaine est en cache parce que le problème se produit uniquement lorsque les boutons sont dessinés en dehors de mon panneau sip (au-dessus). Je n'ai pas ce problème avec des boutons à l'intérieur du panneau, même s'ils sont également attirés par l'écran. –

+0

Quand je dis des boutons à l'intérieur du panneau, je veux dire les boutons contextuels bleus sélectionnés. (tous les autres boutons sont dessinés sur un bitmap, puis blt sur le DC de mon panneau de sip et non sur l'écran) –

1

Avez-vous essayé InvalidateRect sur l'écran hWnd?

+0

par screen hWnd Je suppose que vous voulez dire :: GetDesktopWindow(), correct? Si c'est ce que vous voulez dire alors oui j'ai essayé tous les appels habituels contre l'écran wnd. –

Questions connexes