2008-10-12 7 views
1

Dans une application MFC, il existe une petite zone rectangulaire dans laquelle les barres de défilement se rencontrent (en bas à droite de la fenêtre). Il semble que cette région n'invalide que lorsque le cadre est redimensionné. Dans d'autres cas (par exemple, si une autre fenêtre est déplacée dessus), cette zone ne sera pas repeinte.Petit problème de peinture des barres de défilement avec MFC

J'ai été capable de le reproduire en VS 6 et 2008 sur des projets nouvellement créés. J'ai également vu des applications commerciales avec le même problème. Pour le recréer:

  1. Créez un nouveau projet SDI avec une vue dérivée CScrollView.
  2. Redimensionnez la fenêtre de manière à afficher les deux barres de défilement.
  3. Faites glisser une autre fenêtre sur ce rectangle pour voir le problème de repeindre.

Des idées pour se débarrasser de cela?

+0

Je crois que votre démo de problème, en particulier la partie 3, a comme prérequis que le "Afficher le contenu de la fenêtre tout en faisant glisser" est sélectionné. – tzot

+0

Pas nécessairement. Vous pouvez également simplement faire glisser la première fenêtre (le programme MFC) hors de l'écran et vice versa et le rectangle ne sera pas invalide. –

Répondre

1

Un travail autour serait de piéger la méthode OnPaint du CScrollView et dans cette méthode ajouter du code à peindre toujours le coin inférieur de la fenêtre du client.

Mais ce code de peinture devrait également appeler GetDC pour obtenir une nouvelle CDC, afin qu'il puisse contourner les régions de découpage du BeginPaintCDC passé dans le message WM_PAINT.

+0

Merci, et je vais probablement finir par faire exactement cela. Je pensais juste qu'il y avait une solution "standard" car il semble que ce serait un problème assez commun. –

Questions connexes