Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
926 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Barre d'état (rajout icones)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Barre d'état (rajout icones)

n°728795
choupinou
Posté le 17-05-2004 à 12:20:31  profilanswer
 

J'arrive à rajouter des éléments à ma barre d'état mais ce n'est que du texte. J'aimerais pouvoir rajouter une icone ou une image dans cette barre d'état.
J'ai cherché mais il n'y a pas de fonction SetIcon() ou SetBitmap() membre pour la classe CStatusBar.
Est-ce que quelqu'un sait comment faire? :??:

mood
Publicité
Posté le 17-05-2004 à 12:20:31  profilanswer
 

n°728878
pedro-2480
Posté le 17-05-2004 à 13:20:03  profilanswer
 

Il faut commencer par modifier le tableau static indicators présent (typiquement) dans le .cpp de la fenêtre cadre principale.
 
Par exemple, si tu veux rajouter une icone, rajoute une zone nommée ID_INDICATOR_MYICON au tableau(n'oublie pas de rajouter le symbole ID_INDICATOR_MYICON dans ta string table dans le resource manager)
 

Code :
  1. static UINT indicators[] =
  2. {
  3. ID_INDICATOR_TEXT, // 4 zones de texte séparées
  4. ID_INDICATOR_TEXT,
  5. ID_INDICATOR_TEXT,
  6. ID_INDICATOR_TEXT,
  7. ID_INDICATOR_MYICON, // notre icone
  8. };


 
Ensuite, il suffit de récupérer le rectangle qui entoure la zone que tu as crée dans ta statusbar -> CStatusBar::GetItemRect() + CStatusBar::CommandToIndex()
 
Par exemple:
 

Code :
  1. CRect br;
  2. m_wndStatus.GetItemRect(m_wndStatus.CommandToIndex(ID_INDICATOR_MYICON), &br);


 
Il ne te reste plus qu'a créer le controle à placer dans la statusbar (la statusbar est la fenêtre parent de ce controle...)
 
Ex:
 

Code :
  1. m_staticLed.Create(NULL, WS_CHILD | WS_VISIBLE | SS_ICON | SS_CENTER, br, &m_wndStatus);
  2. m_staticLed.SetIcon(LoadIcon(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDI_LEDON)));
  3. m_staticLed.SetWindowPos(NULL, 0,0, br.Width(), br.Height(), SWP_NOMOVE | SWP_NOZORDER);


 
Note que j'ai positionné (lors de sa création) et dimensionné (SetWindowPos) mon controle à l'aide du rectangle renvoyé précdemment  (br).
 
Le pb est que ce rectangle a pour dimension la taille maximale de la zone de texte ( symbole ID_INDICATOR_MYICON) qui a été définie dans le resource manager -> 0*0 si tu n'as pas défini de texte associé à ce symbole.
 
Pour que ce rectangle ait des dimensions correctes, il faut donc associer un texte au symbole ID_INDICATOR_MYICON, par exemple: une chaine de " " de la longueur que ton controle aura...
 
Cette solution est brouillon, la meilleure solution est de récupérer les dimensions de ton controle et/ou de les fixer indépendamment des dimensions du symbole...
 
edit: La méthode CStatusBar::SetPaneInfo() peut t'être très utile...


Message édité par pedro-2480 le 17-05-2004 à 13:38:05

---------------
- Pierre Baudelet -
n°728939
choupinou
Posté le 17-05-2004 à 14:24:48  profilanswer
 

Merci beaucoup

n°728983
choupinou
Posté le 17-05-2004 à 14:40:31  profilanswer
 

Question a la con mais c'est quoi ton m_staticLed?
Tu le défini comment?

n°729011
pedro-2480
Posté le 17-05-2004 à 14:48:50  profilanswer
 

C'est un CStatic qui me sert à afficher une belle LED (comme Winzip) ;)


---------------
- Pierre Baudelet -
n°729081
choupinou
Posté le 17-05-2004 à 15:40:43  profilanswer
 

Ca marche mais c'est pas terrible.
En fait le texte défini dans la string table passe au-dessus de l'icone.
Je vois donc l'icone que très brèvement et seulement quand je fais quelquechose (bouger souris par ex)

n°729530
pedro-2480
Posté le 17-05-2004 à 21:09:10  profilanswer
 

Dans ce cas c'est que tu n'as pas fait les opérations au bon moment (genre dans OnCreate ou OnInitDialog)
 
Cela marche parfaitement normalement...
 
Si le pb est encore la, positionne ton icone en top du Z order de l'ensemble des éléments de la status bar (::SetWindowPos(m_wndStatusBar.m_hWnd, m_superbeIcone.m_hWnd, 0,0,0,0, SWP_NOMOVE |SWP_NOSIZE) )


---------------
- Pierre Baudelet -
n°730322
choupinou
Posté le 18-05-2004 à 14:36:57  profilanswer
 

Non désolé même avec ca ca marche pas.
J'utilise ces lignes de code ailleurs.
En fait je l'utilise dans une fonction permettant de mettre à jour continuellement la barre d'état :

Code :
  1. void CMainFrame::OnUpdate....(CCmdUI *pCmdUI)
  2. {
  3.        //les lignes de code
  4. }


Quand je fais ça, le texte que j'ai rajouté dans ma string table s'affiche par-dessus l'icone.
Et ta dernière fonction n'y change rien.
C'est le fait que les lignes soient mal placées?
Parce qu'en fait il faut absolument que cette icone soit mise à jour régulièrement (affichage de 2 icones différentes dans le même espace)

n°731330
choupinou
Posté le 19-05-2004 à 12:42:08  profilanswer
 

up


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Barre d'état (rajout icones)

 

Sujets relatifs
Barre défilante en même temps que l'ascenseuricones pour le développeur
[dreamweaver- site]barre menu seulement visible dans le rendu???[Débutante] Coloration de la barre de défilement
[ACCESS] Tableaux d'affichage tout simple dans un étatEtat access-> ligne de couleurs différentes
afficher l'etat d'un serveur sur une page woueb[Swing][jtree]Problemes d'icones....
ACCESS - Modif marges d'un état par VBAetat sur access
Plus de sujets relatifs à : Barre d'état (rajout icones)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR