Static

Résolu
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 - 11 oct. 2004 à 19:10
DarkBoss Messages postés 154 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 12 décembre 2008 - 23 janv. 2005 à 21:39
salut a tous.
bon alors voila. je fais une fenetre, et je voudrais placer quelques statiques. la j'ai plusieurs questions. la premiere étant comment faire un static sans bordure, dont on ne voit que le texte et dont le fond soit transparent, c'est a dire que meme si l'on a une image derrière on puisse la voir, par exemple.
ensuite, est ce qu'il est possible de faire ce static avec le texte qui est a l'interieur défini tel que tout ne soit pas de la meme couleur? je voudrais que tout soit d'une couleur sauf un caractere que je définisse d'une autre(et si oui, comment définir les couleurs? l'ideal etant une fonction a laquelle on passe les tons des toris couleurs primaires).
merci d'avance pour vos reponse.

10 réponses

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
11 oct. 2004 à 19:54
Salut,
Pour que le STATIC n'ait pas de bordure, il suffit de ne pas mettre le style WS_BORDER ou décocher BORDER si tu utilises l'éditeur de ressources. Voici la page MSDN sur tous les styles des STATICs:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/staticcontrols/staticcontrolreference/staticcontrolstyles.asp

Pour mettre de la couleur dans un STATIC il faut lui créer un Device Context grâce à la fonction GetDC(). Cette dernière te donne un handle qui te permettra d'écrire directement, et comme tu veux, dans le STATIC grâce aux fonctions suivantes:
TextOut()
DrawText()
SetTextColor()
Etc...
3
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
11 oct. 2004 à 21:09
Pour simplifier, un Device Context est une zone graphique sur laquelle on peut ecrire ou dessiner directement (ecran, imprimante, fenetre, static, edit ect...). On ne peut pas utiliser la couleur avec SetWindowText(). Un Device Context nous permet de manipuler à fond les objets graphiques grâce de nombreuses fonctions API. A propos de le transparence on utilise la fonction SetBkMode() comme ceci:
SetBkMode(hdc,TRANSPARENT);
3
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
12 oct. 2004 à 03:27
Avec SetBkMode(), la transparence n'est effective qu'à la prochaine ecriture dans le static. Par exemple:
HWND Zone_Texte =CreateWindowEx(.........);
HDC hdc=GetDc(Zone_Texte);
TextOut(hdc,0,0,"TTTT",4);
SetBkMode(hdc,TRANSPARENT);
TextOut(hdc,0,0,"oooo",4);

Tu remarqueras que les "o" sont écris sur les "T". Cela prouve que le static est devenu transparent. Si tu veux que le static soit transparent dès le lancement de l'application, tu peux intercepter le message WM_CTLCOLORSTATIC dans la procédure de la fenêtre comme ceci:
case WM_CTLCOLORSTATIC:
                  if ((HWND)lParam==Zone_Texte) 
  {
                  SetBkMode((HDC)wParam, TRANSPARENT);
                  return (BOOL)GetStockObject(NULL_BRUSH);
  }
     return 0;
3
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
11 oct. 2004 à 20:04
c'est quoi un device context??????? j'ai vu ds pas mal de source que c'etait utilisé mais j'ai jamais trop compris ce que c'etait, une pitite explication serait pas de refus ;oD pour les fonction qui prennent un HDC, pourquoi je passe par la? pour mettre du texte dans mon static, j'ai pas juste a faire un SetWindowText????c'est quoi l'interet de passer par un HDC?? bon si c'est le seul moyen pour lui passer une couleur de transparence........d'ailleurs comment je vais définir couleur de transparence?
merci d'avance (je sais que ca fait bcp de questions en bordel, mais bon...)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
11 oct. 2004 à 23:59
oki merci beaucoup!!!
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
12 oct. 2004 à 00:05
euh.....
j'ai fait:

HWND Texte = CreateWindowEx(0, "STATIC", NULL, WS_VISIBLE|WS_CHILD,220, 250, 80, 20, hWndMainWnd, (HMENU)ID_TXT_TEXTE, hInst, NULL);
SendMessage (Zone_Texte, WM_SETFONT, WPARAM (Font), TRUE);
HDC hdc = GetDC (Zone_Texte);
SetBkMode(hdc,TRANSPARENT);

et c'est pas transparent, j'ai fait un truc qui fallait pas, ou tu t'es planté a un endroit? dsl si j'aivraiment fait un truc debile et que ma question est con, mais la..........
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
12 oct. 2004 à 15:13
en faisannt ca, ca me met bien le static transparent....sauf en dessous du texte.je mexplique:
la ou j'ai du texte, ce texte est sur fond blanc, tout le reste de mon static est transparent....la je capte pas...
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
12 oct. 2004 à 21:41
Salut,
C'est tout à fait normal. Avant d'appeler TextOut() pour la première fois, tu dois appeler SetBkMode(hdc,TRANSPARENT). Ainsi, si tu fais TextOut(hdc,"OOOO",4) l'intérieur des "O" devient totalement transparent.
0
DarkBoss Messages postés 154 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 12 décembre 2008
16 janv. 2005 à 21:17
Cela ne marche pas avec dev-c++,

DarkBoss
0
DarkBoss Messages postés 154 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 12 décembre 2008
23 janv. 2005 à 21:39
rectification faite cela marche, mais je me pose une question est-ce normale que tout ce que l' on envoi au static reste superposé ? si on rentre salut et bonjour bonjour va se superposé sur salut !
y' a t' il une solution ?

DarkBoss
0
Rejoignez-nous