2009-02-07 5 views
1

J'utilise une classe dérivée de CControlBar et je voudrais détecter quand l'état d'ancrage de la CControlBar a changé (c.-à-d., Passer de la verticale à l'horizontale ou quand elle passe en mode flottant).Détection du changement de l'état d'ancrage d'un CControlBar

Bien sûr, je pouvais gérer WM_SIZE mais il semble que ce soit une perte de ressources de faire la tâche chaque fois qu'un message WM_SIZE est déclenché au lieu de seulement lorsque l'état d'ancrage a changé.

Quelqu'un peut-il me diriger dans la bonne direction?

Répondre

3

Vous pouvez remplacer la fonction virtuelle CControlBar::OnBarStyleChange pour détecter les changements dans le style de la barre de contrôle (valeurs CBRS_XXX - consultez le fichier d'en-tête <afxres.h> pour plus de détails).

Pour déterminer si la barre de contrôle est flottante/ancrée, vérifiez le style CBRS_FLOATING. Pour vérifier l'orientation horizontale/verticale, utilisez les styles CBRS_ORIENT_HORZ et CBRS_ORIENT_VERT.

Ainsi, en utilisant CToolBar (qui est dérivé de CControlBar) comme exemple:

class CMyToolBar : public CToolBar { 
public: 
    virtual void OnBarStyleChange(DWORD dwOldStyle, DWORD dwNewStyle); 
}; 

void CMyToolBar::OnBarStyleChange(DWORD dwOldStyle, DWORD dwNewStyle) 
{ 
    // Call base class implementation. 
    CToolBar::OnBarStyleChange(dwOldStyle, dwNewStyle); 

    // Use exclusive-or to detect changes in style bits. 
    DWORD changed = dwOldStyle^dwNewStyle; 

    if (changed & CBRS_FLOATING) { 
     if (dwNewStyle & CBRS_FLOATING) { 
      // ToolBar now floating 
     } 
     else { 
      // ToolBar now docked 
     } 
    } 

    if (changed & CBRS_ORIENT_ANY) { 
     if (dwNewStyle & CBRS_ORIENT_HORZ) { 
      // ToolBar now horizontal 
     } 
     else if (dwNewStyle & CBRS_ORIENT_VERT) { 
      // ToolBar now vertical    
     } 
    } 
} 

J'espère que cela aide!

+0

Cela aide beaucoup! Merci d'avoir répondu si rapidement et pour l'exemple - c'est génial :-) – fhe

Questions connexes