HOWTO: How to Get the Current State of a Button in a CToolbar (115306)



The information in this article applies to:

  • The Microsoft Foundation Classes (MFC), when used with:
    • Microsoft Visual C++ for Windows, 16-bit edition 1.0
    • Microsoft Visual C++ for Windows, 16-bit edition 1.5
    • Microsoft Visual C++ for Windows, 16-bit edition 1.51
    • Microsoft Visual C++ for Windows, 16-bit edition 1.52
    • Microsoft Visual C++, 32-bit Editions 2.0
    • Microsoft Visual C++, 32-bit Editions 2.1
    • Microsoft Visual C++, 32-bit Editions 4.0

This article was previously published under Q115306

SUMMARY

Although the Microsoft Foundation Classes (MFC) offer a useful and easy method of keeping the state of a menu command and/or toolbar button in a CControlBar tied together, there is no easy means of finding out the command's or button's current state.

MORE INFORMATION

To find the current state of a menu command or toolbar button in a CControlBar-derived class, use the following piece of code:
      UINT iButtonID;
      UINT iButtonStyle;
      int iButtonImage;

      // If the Toolbar is not based upon the default "AFX_IDW_TOOLBAR"
      // constant, then replace its use with the valid Toolbar constant.

      // If the following line is used from the Frame Window remove
      //"GetParentFrame()->":
      CToolBar* pBar =
      (CToolBar*)GetParentFrame()->GetDescendantWindow(AFX_IDW_TOOLBAR);

      // If this code sample is called from an AppWizard generated,
      // Frame Window member function in Visual C++ 4.0, replace the above
      // statement with the following. Recall that the CMDIFrameWnd-derived
      // Frame Window generated by AppWizard has a CToolBar m_wndToolBar
      // member.
      CToolBar* pBar = &m_wndToolBar;

      if (pBar != NULL) {

           // Use the relevant Button ID for the following line:
           int iButtonIndex = pBar->CommandToIndex(ID_MY_BUTTON);

           pBar->GetButtonInfo(iButtonIndex, iButtonID, iButtonStyle,
      iButtonImage);

           // The following code checks for all possible states.
           // In practice, check only for those states that you need.

           if (iButtonStyle & TBBS_PRESSED)
                // Button Down
           else
                if (iButtonStyle & (TBBS_CHECKED & TBBS_DISABLED))
                     // Button Down & Unavailable
                else
                     if (iButtonStyle & TBBS_DISABLED)
                          // Button Disabled
                     else
                          if (iButtonStyle & TBBS_INDETERMINATE)
                               // Button State Indeterminate
                          else
                               if (iButtonStyle & TBBS_CHECKED)
                                    // Button Checked
                               else
                                    // Button Up & Enabled

      }
				

Modification Type:MajorLast Reviewed:12/2/2003
Keywords:kbhowto kbToolbar KbUIDesign KB115306