[Bug] - Erreur avec CreateCompatibleDC
Bonjour,
Je developpe actuellement un petit projet d'interface graphique...
J'ai créé plusieurs composants, notamment un panneau defilant (avec des barres de scrolls)
J'ai remarqué un bug dont je ne comprends pas l'origine :
Lorsque je tourne la molette de la souris à fond les ballons, l'ecran se rafraichit plein de fois (normal) et au bout d'un moment, les bitmaps ne sont plus dessinées.
En cherchant un peu, c'est l'appel à CreateCompatibleDC qui me renvoit un hdcMem à NULL.
Voila le code de ma fonction :
je precise :
- les HBITMAP et les HBRUSH pointés par pSkin sont bien valides, j'ai vérifié
- j'ai essayé de remplacer CreateCompatibleDC(NULL) par CreateCompatibleDC(hdc)
- le hdc transmis à la fonction n'est jamais NULL, lui
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
void cGuiBarreDefilement::dessiner(HDC hdc, RECT updateRect)
{
RECT rc;
HDC hdcMem;
rc = m_surface.intersection(updateRect);
hdcMem = CreateCompatibleDC(NULL);
// Dessin du fond
FillRect(hdc,&rc,pSkin->barreDefilements[m_modele].m_fond);
// Dessin du curseur
if ( (m_surfaceCurseur.largeur != 0) && (m_surfaceCurseur.hauteur != 0) )
{
rc = m_surfaceCurseur.rectangle();
if (m_surfaceCurseur.collision(updateRect))
FillRect(hdc,&rc,pSkin->barreDefilements[m_modele].m_curseur);
}
// Dessin des boutons
if (m_surfaceBoutonMoins.collision(updateRect))
{
if (m_orientation & GUI_VERTICAL)
SelectObject(hdcMem,pSkin->barreDefilements[m_modele].m_boutonHaut.m_bitmap);
else
SelectObject(hdcMem,pSkin->barreDefilements[m_modele].m_boutonGauche.m_bitmap);
BitBlt(hdc,m_surfaceBoutonMoins.x,m_surfaceBoutonMoins.y,m_surfaceBoutonMoins.largeur,m_surfaceBoutonMoins.hauteur,hdcMem,0,0,SRCCOPY);
}
if (m_surfaceBoutonPlus.collision(updateRect))
{
if (m_orientation & GUI_VERTICAL)
SelectObject(hdcMem,pSkin->barreDefilements[m_modele].m_boutonBas.m_bitmap);
else
SelectObject(hdcMem,pSkin->barreDefilements[m_modele].m_boutonDroit.m_bitmap);
BitBlt(hdc,m_surfaceBoutonPlus.x,m_surfaceBoutonPlus.y,m_surfaceBoutonPlus.largeur,m_surfaceBoutonPlus.hauteur,hdcMem,0,0,SRCCOPY);
}
DeleteDC(hdcMem);
} |
J'ai regardé le codes d'erreur renvoyés par CreateCompatibleDC, et j'obtiens ça :
Code:
1 2 3 4 5 6 7 8
|
Erreur : HDCMem=NULL : 6 - Descripteur non valide
Erreur : HDCMem=NULL : 6 - Descripteur non valide
Erreur : HDCMem=NULL : 0 - Opération réussie.
Erreur : HDCMem=NULL : 6 - Descripteur non valide
Erreur : HDCMem=NULL : 6 - Descripteur non valide
Erreur : HDCMem=NULL : 0 - Opération réussie.
etc... |
Ce qui m'étonne :
- pourquoi ça plante que au bout d'un moment ?
- pourquoi Erreur : HDCMem=NULL : 0 - Opération réussie ?
Merci de me filer un coup de main, ce truc va me rendre dingue !