Redessiner un bouton après appui

cs_tdeco Messages postés 53 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 27 mai 2005 - 5 janv. 2005 à 11:55
cs_tdeco Messages postés 53 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 27 mai 2005 - 5 janv. 2005 à 16:04
Salut
En fait j'ai une boite de dialogue où j'ai plusieurs boutons.
Sur j'appui d'un bouton, je modifie une variable, puis j'envoie un message WM_DRAWITEM afin de redessiner le bouton
voici le code:

LRESULT CALLBACK ETAT_ALARME(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdcalarme;
HWND hwndbouton;
switch (message)
{
case WM_INITDIALOG:
ETAT_ALARME_InitDialog(hDlg);
return TRUE;

case WM_COMMAND:
switch (LOWORD(wParam)){

case IDC_ALARME_ECLAIR:
flag_ALARME_ECLAIR= OK;
SendMessage(hDlg,WM_DRAWITEM,0,lParam);
return TRUE;

//De meme pr les autres boutons

}// end of switch (LOWORD(wParam))

break;

case WM_CLOSE://sortir du menu sans action (avec la croix X )
DestroyWindow(hDlg);
break;


case WM_DRAWITEM:
ETAT_ALARME_DrawButton (hDlg, (LPDRAWITEMSTRUCT)lParam);
break;


} // end of switch (message)
return FALSE;
}

void ETAT_ALARME_DrawButton (HWND hWnd, LPDRAWITEMSTRUCT pdi)
{

switch (pdi->CtlID)
{

case IDC_ALARME_ECLAIR:
if (flag_ALARME_ECLAIR = = OK) DrawIconEx (pdi->hDC, ptIn.x,ptIn.y, hIcon_OK,0,0,0,NULL, DI_NORMAL);
else if (flag_ALARME_ECLAIR = = NONOK) DrawIconEx (pdi->hDC, ptIn.x,ptIn.y, hIcon_QUIT,0,0,0,NULL, DI_NORMAL);
break;

//De meme pr les autres boutons


//---------------------------------
} //end of switch (pdi->CtlID)
}

Donc normalement, lorsque j'appui sur un bouton, il doit envoyer le message avec le "lparam" correspondant au bouton. Et c'est là d'où vient le pb.
Je veux envoyer la bonne valaur afin de rafraichir le bouton correspondant

Quelqu'un peut il m'aider

Merci d'avance

4 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
5 janv. 2005 à 12:10
Pour redessiner le bouton, il suffit de faire InvalidateRect(hBtn, NULL, TRUE) et WM_DRAWITEM sera envoyé automtiquement par le système
0
cs_tdeco Messages postés 53 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 27 mai 2005
5 janv. 2005 à 13:09
merci ca marche, mais si je veux redessiner tous les boutons à partir d'une autre boite de dialogue, quel message doit envoyer à la boite de dialogue destination?
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
5 janv. 2005 à 13:13
Il te suffit de redessiner complètement le dialogue en question :
InvalidateRect(hDlg, NULL, TRUE);

le contenu du dialogue hDlg (et tous ses contrôles) seront redessinés.
0
cs_tdeco Messages postés 53 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 27 mai 2005
5 janv. 2005 à 16:04
Ok je te remercie
j'ai encore un pb au niveau du raffraichissement. J'avais déja posé mon pb sur le forum et je n'avais pas eu bq de réponses.
voir : http://www.cppfrance.com/forum.v2.aspx?ID=362437

étant donné que tu as à l'air très calé sur ce point, peux tu m'aider s'il te plait?
0
Rejoignez-nous