Ecrire en couleur sans changer le fond [dialogbox] [Résolu]

Signaler
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011
-
Messages postés
241
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
8 octobre 2007
-
bsoir all! :-)

Voila, j'aimerais bcp changer le fond d'une dialogbox (ça, ça marche sans pb), mais j'aimerai ensuite rajouter des controles tels que des LTEXT etc...le pb c'est que ces LTEXT apparaissent ecrit en noir sur fond gris, comme d'habitude, ce qui gache le fond de la dialogbox...et la fenetre est moche.....qqun sait cmt faire pr contourner le pb ? merci d'avance!

Gendal67, Dev-C++ 4.9.9.0, J'adore cppfrance!! :-))

8 réponses

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,
Je pense que ça correspond exactement à ce que tu cherches. En fait le LTEXT est un STATIC. On le manipule donc exatement comme on fait avec les STATICs. Puisque tu connais l'identificateur de ton LTEXT, IDC_STATIC par exemple, tu peux le mettre comme paramètre à une fonction de manipulation des STATICs. Exemples:
//pour récupérer le handle du LTEXT:
HWND hLtext=GetDlgItem(hDlg,IDC_STATIC);
//pour écrire dans le LTEXT:
SetWindowText(hLtext,"Bonjour");
//ou:
SetDlgItemText(hDlg,IDC_STATIC,"Bonjour");
//etc...

hDlg étant le handle de la boite de dialogue et IDC_STATIC l'identificateur de ton LTEXT.
Pour la transparence de ton LTEXT il te suffit de copier l'exemple que je t'ai proposé et le coller dans la procédure de ta boite de dialogue. Voici un autre exemple pour gérer plusieurs LTEXTs:
case WM_CTLCOLORSTATIC:
// 1er LTEXT:
if ((HWND)lParam==GetDlgItem(hDlg,IDC_STATIC1)) 
{
SetBkMode((HDC)wParam, TRANSPARENT);
return (BOOL)GetStockObject(NULL_BRUSH);
}
// 2eme LTEXT:
if ((HWND)lParam==GetDlgItem(hDlg,IDC_STATIC2)) 
{
SetBkMode((HDC)wParam, TRANSPARENT);
return (BOOL)GetStockObject(NULL_BRUSH);
}
// 3eme LTEXT:
// if .....
return 0;

Ainsi, au lancement de la boite de dialogue tous tes LTEXTs seront totalement transparents et les petits fonds gris disparaitront.
Bonne programmation.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Encore cette question...
http://www.cppfrance.com/code.aspx?id=10501

Suffit de traiter messages WM_CTLCOLORSTATIC et autres de sa categorie.

ciao...
BruNews, MVP VC++
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

Merci bcp pr ton aide :-))

Gendal67, Dev-C++ 4.9.9.0, J'adore cppfrance!! :-))
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

Ecoute, BruNews, je suis désolé...je ne m'y retrouve vraiment pas dans ton appli :( ac tous ces boutons, ces scrollbars....je en sais même pas où chercher...:(

Gendal67, Dev-C++ 4.9.9.0, J'adore cppfrance!! :-))
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,
Voici un petit exemple pour rendre le fond d'un STATIC transparent:
case WM_CTLCOLORSTATIC:
if ((HWND)lParam==hStatic) 
{
SetBkMode((HDC)wParam, TRANSPARENT);
return (BOOL)GetStockObject(NULL_BRUSH);
}
return 0;

hStatic est le handle du STATIC. Tu peux le remplacer par GetDlgItem(hDlg,IDC_STATIC).....
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

Oui merci, mais en quoi c'est sensé m'aider ?

Gendal67, Dev-C++ 4.9.9.0, J'adore cppfrance!! :-))
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

Oui, oui, merci! C'est exactement ça!! Le "truc", c'est que bruNews me l'as expliqué il ya qq heures déja :p
Merci quand même de t'etre donner du mal pr m'aider :-)

Gendal67, Dev-C++ 4.9.9.0, J'adore cppfrance!! :-))
Messages postés
241
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
8 octobre 2007
1
Et puis c'est pas perdu pour tout le monde. :)

eRoZion