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 :
- static UINT indicators[] =
- {
- ID_INDICATOR_TEXT, // 4 zones de texte séparées
- ID_INDICATOR_TEXT,
- ID_INDICATOR_TEXT,
- ID_INDICATOR_TEXT,
- ID_INDICATOR_MYICON, // notre icone
- };
|
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 :
- CRect br;
- 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 :
- m_staticLed.Create(NULL, WS_CHILD | WS_VISIBLE | SS_ICON | SS_CENTER, br, &m_wndStatus);
- m_staticLed.SetIcon(LoadIcon(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDI_LEDON)));
- 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 -