zanrek
Messages postés25Date d'inscriptiondimanche 26 février 2006StatutMembreDernière intervention26 septembre 2009
-
24 juil. 2007 à 14:33
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 2010
-
26 juil. 2007 à 17:15
Bonjour,
je souhaiterais créer une boite de dialogue, mais lors de l'initialisation de celle-ci, je voudrais être capable de modifier la couleur et la taille de la police, ainsi que la couleur de fond de la fenêtre, celle des boutons etc....
Pour la couleur de fond, j'ai essayé avec SetBkColor (this, RGB (50,100,50)); dans OnInitDialog; mais Visual studio me dit
"imposssible de convertir le paramètre 1 de CVisualidmDlg * const en HDC"
N'y aurait-il pas un moyen de faire celà plus simplement en passant dans les propriétés de l'objet? (et sinon où dois-je implanter le code?)
zanrek
Messages postés25Date d'inscriptiondimanche 26 février 2006StatutMembreDernière intervention26 septembre 2009 25 juil. 2007 à 10:33
J'ai du nouveau dans mon problème...
selon msdn, SetDialogBkColor est obsolète, et ils n'en disent pas plus...
Ils demandent de passer par un message: WM_CTLCOLOR. Ceci dit, je ne suis pas du tout à l'aisse avec la manipulation des messages de windows... j'ai bien trouvé un tutoriel dans un bouquin, mais celui-ci passe parle class wizard de Visual C++. Et comme par magie, bah moi je suis sous Visual studio 2005... donc sans class wizard.
Y aurait-il quelqu'un qui pourrait m'aider, parceque là franchement, je ne sais plus trop ou chercher... entre msdn online qui donne 3 méthodes différentes que je n'arrive pas a faire marcher, et MSDN local qui me donne d'autres infos, çà me mélange tout...
Donc quelqu'un aurait-il un exemple de code utilisant ces fameux messages (si possible avc un WM_CTLCOLOR) histoire que je puisse par la suite essayer de l'adapter à mon cahier des charges, à savoir obtenir des textes de couleur (vert rouge et jaune) le tout sur un fond noir.
dletozeun
Messages postés546Date d'inscriptionvendredi 13 février 2004StatutMembreDernière intervention 9 janvier 20081 25 juil. 2007 à 19:14
Salut,
Une facon simple de creer des boites de dialogue et meme plus c'est GTK... C'est completement a coté de ton probleme mais en plus c'est portable et pas prise de tete.
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 25 juil. 2007 à 21:23
Bon pour changer la couleur de fond :
dans l'initialisation de la boîte de dialogue tu crées un BRUSH de la couleur souhaitée (et tu le stockes quelque part)...
HBRUSH hbr_BackGround=CreateSolidVrush(RGB(...));
...que tu détruiras quand le dialogue se terminera.
ensuite dans la boucle de messages :
case WM_CTLCOLORDLG: return (INT_PTR)hbr_BackGround;
(j'espère que ca marche j'ai pas testé)
pour les textes je sais pas trop mais apparemment c'est pas très différent
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 26 juil. 2007 à 11:44
Mouais, la méthode que j'ai filée c'est pour une prog purement native, cependant on dirait que tes ON_WM_... y ressemblent, ca doit être ça.
Une petite précision : en fait c'est pas toi qui te charges de changer la couleur (y a pas de SendMessage(...)), c'est simplement que, lorsque windows envoie une requête pour la couleur (et ça arrive souvent, à chaque affichage je suppose) tu lui retournes la couleur souhaitée. Ainsi si tu veux changer la couleur plus tard, tu as seulement à modifier le BRUSH retourné.
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 26 juil. 2007 à 17:10
Jamais fait de MFC encore, toutefois peut-être ceci pourra-t-il aller.
dans ton bloc BEGIN_MESSAGE_MAP (le fameux AFX_MSG_MAP), tu rajoutes un item
ON_MESSAGE(WM_CTLCOLORDLG,fctColorDlg)
et tu implémentes (quelque part dans le fichier) la fonction fctColorDlg comme suit:
LRESULT fctColorDlg(WPARAM wParam,LPARAM lParam){return (LRESULT)hbr_BackGround;}
de même pour le texte:
ON_MESSAGE(WM_CTLCOLORSTATIC,fctTextColor)
et LRESULT fctTextolor(WPARAM wParam,LPARAM lParam){SetTextColor(...);return (LRESULT)hbr_BackGroud;}
Voila j'espère que tu peux insérer un truc dans ce genre
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 26 juil. 2007 à 17:15
Maintenant que j'y pense : l'implémentation des fonctions (fctColorDlg fctTextColor...) tu la mets n'importe où dans un fichier .cpp. Mais leur déclaration tu peux la mettre (il faut, peut-être) dans le header après le bloc AFX_MSG et avant DECLARE_MESSAGE_MAP.