Barre d'état (rajout icones) - C++ - Programmation
Marsh Posté le 17-05-2004 à 13:20:03
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 :
|
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 :
|
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 :
|
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...
Marsh Posté le 17-05-2004 à 14:40:31
Question a la con mais c'est quoi ton m_staticLed?
Tu le défini comment?
Marsh Posté le 17-05-2004 à 14:48:50
C'est un CStatic qui me sert à afficher une belle LED (comme Winzip)
Marsh Posté le 17-05-2004 à 15:40:43
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)
Marsh Posté le 17-05-2004 à 21:09:10
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) )
Marsh Posté le 18-05-2004 à 14:36:57
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 :
|
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)
Marsh Posté le 17-05-2004 à 12:20:31
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?