Pb d'actualisation d'affichage.

gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009 - 19 déc. 2005 à 22:17
gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009 - 19 déc. 2005 à 22:51
j'ai un programme qui fais bcp de choses (lol)
pour pimenter le tout j'ai fais un menu pour personnaliser l'interface (couleur du fond, couleur des controles...)

le pb est que lorsque je choisi une image sur le disque (parcours du disque dur et selection), mon dialogue ne s'actualise pas.
par contre lorsque je choisi une couleur perso ou une image qui est dans les ressources pour le fond -> pas de probleme.

PS: le changement se fait à la volée grace à un RedrawWindow(). si je quitte mon prog et que je le réouvre, là pas de probleme (je gere les sauvegardes) car mon appli passe par OnInitDialog -> OnPaint() .....

PS2: quel sont les messages successifs interceptés par windows de l'init d'un dialog à la femeture ?.

gege

3 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 déc. 2005 à 22:31
ouh là, des dizaines...
Mets WM_xxx das MSDN et tu auras la liste devant toi.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009
19 déc. 2005 à 22:38
je met un peu de code ici, je ne comprend pas pourquoi ca marche pas avec le cas 1.
j'au un bouton sur le dialogue qui fait un RedrawWindow().
si qq'un pouvais essayer ca ?
(il faut un groupe de radio et un bouton qui fait RedrawWindow() )

BOOL CDialog::OnEraseBkgnd(CDC* pDC)
{

if (m_radio_fond == 0)
{
// COULEUR DU FOND
// Fixe une brosse avec la couleur de fond choisie
CBrush BkClrBrush(RGB(coul_fond_r, coul_fond_v, coul_fond_b));


// Sauvegarde l’ancienne brosse.
CBrush* pOldBrush = pDC->SelectObject(&BkClrBrush);
CRect rect;
pDC->GetClipBox(&rect); // récupère la zone a effacer.


pDC->PatBlt(rect.left, rect.top, rect.Width(),rect.Height(), PATCOPY);
pDC->SelectObject(pOldBrush);// restitue l’ancienne brosse.
return true;
}


else if (m_radio_fond == 1)
{
// CHARGE IMAGE FICHIER
CPaintDC hdc(this);
HBITMAP bit;
BITMAP bitmap;
CRect rect;
GetClientRect(&rect);

bit= (HBITMAP) LoadImage(NULL, fic_img_abs, IMAGE_BITMAP,0,0, LR_DEFAULTSIZE | LR_LOADFROMFILE);
GetObject(bit, sizeof(BITMAP), &bitmap);
HDC bit_dc = CreateCompatibleDC(hdc);
SelectObject(bit_dc, bit);
StretchBlt(hdc,0,0,rect.Width(),rect.Height(),bit_dc,0,0,bitmap.bmWidth,bitmap.bmHeight, SRCCOPY );
DeleteObject(bit);
DeleteDC(bit_dc);
return true;

}


CBitmap bmp;
CBitmap *ptrBmpOld;
CDC dcMemory;
BITMAP bm;
CRect rect;
int nHor,nVer;


bmp.LoadBitmap(IDB_BITMAP_CONF);
bmp.GetBitmap(&bm);
GetClientRect(rect);
nHor = rect.Width()/bm.bmWidth+1;
nVer = rect.Height()/bm.bmHeight+1;
dcMemory.CreateCompatibleDC(pDC);
ptrBmpOld=dcMemory.SelectObject(&bmp);


// etirer l'image (contrairement à bitblt)
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMemory,0,0,bm.bmWidth,bm.bmHeight, SRCCOPY );
dcMemory.SelectObject(ptrBmpOld);
return TRUE;
}

gege
0
gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009
19 déc. 2005 à 22:51
Trouvé
c'est dans OnPaint() qu'il faut faire mon cas 1
merci msdn

gege
0
Rejoignez-nous