Locking Rebars and Toolbars

I found a way to lock the rebars like the rebars in the Windows Explorer under Win 2000/XP (which wasn't easy to do). Simply add the following code to the MainFrm.cpp where you want to lock or unlock the rebar:

CReBarCtrl& rbc = m_wndReBar.GetReBarCtrl();
REBARBANDINFO rbbi;
rbbi.cbSize = sizeof(rbbi);
rbbi.fMask  = RBBIM_STYLE;
int nCount  = rbc.GetBandCount();
for (int i  = 0; i < nCount; i++)
{
   rbc.GetBandInfo(i, &rbbi);
   rbbi.fStyle ^= RBBS_NOGRIPPER | RBBS_GRIPPERALWAYS;
   rbc.SetBandInfo(i, &rbbi);
}

The toolbars in the rebar unlocked:

And now locked:

Thanks to the CodeGuru reviewers, I also know a way to lock toolbars (not within a rebar). The idea is this: when locking controlbars, we need to disable any mouse attempts to move'em around. The key to this is to set the m_pDockBar member to NULL.

When unlocking, make sure to set it back to what it was earlier.. which means the app needs to cache these. This dirty little trick should do the job.

Add these to mainfrm.h:

CDockBar*   m_pTBDockBar;
CDockBar*   m_pDBDockBar;
BOOL m_bLocked;

Add this to mainfrm.cpp (into the constructor):

m_bLocked = FALSE;

Add this code to toggle:

DWORD dwToolbarStyle = m_wndToolBar.GetBarStyle();
DWORD dwDlgbarStyle  = m_wndDlgBar.GetBarStyle();
if(m_bLocked)
{
   // Changes the bars' style, so they have grippers
   dwToolbarStyle |= CBRS_GRIPPER;
   dwDlgbarStyle  |= CBRS_GRIPPER;
   m_wndToolBar.SetBarStyle(dwToolbarStyle);
   m_wndDlgBar.SetBarStyle(dwDlgbarStyle);

   //when removing the fixed style, set back the dockbar
   m_wndToolBar.m_pDockBar = m_pTBDockBar;
   m_wndDlgBar.m_pDockBar  = m_pDBDockBar;
}
else
{
   // Changes the bars' style, so they have not grippers
   dwToolbarStyle &= ~CBRS_GRIPPER;
   dwDlgbarStyle  &= ~CBRS_GRIPPER;
   m_wndToolBar.SetBarStyle(dwToolbarStyle);
   m_wndDlgBar.SetBarStyle(dwDlgbarStyle);

   // If the bar is floating, it will be docked before locking it.
   DockControlBar(&m_wndToolBar);
   DockControlBar(&m_wndDlgBar);

   //remove dockbar so that it cannot be moved around
   m_pTBDockBar = m_wndToolBar.m_pDockBar;
   m_pDBDockBar = m_wndDlgBar.m_pDockBar;
   m_wndToolBar.m_pDockBar = NULL;
   m_wndDlgBar.m_pDockBar  = NULL;
}

m_wndDlgBar.Invalidate();    // dialog bars need Invalidate()
RecalcLayout();
m_bLocked = !m_bLocked;

The toolbars unlocked:

And now locked:

Summary

This code has been tested on Win NT 4.0/2000/XP Pro.

Best regards, Frank



About the Author

Frank Gsellmann

I'm a student and a software developer in Germany

Downloads

Comments

  • Works like a charm, thanks!

    Posted by assaf3D on 10/28/2009 08:07am

    CToolBar on WinXP, set m_pDockBar = NULL just after the three "Docking" function calls and it works.

    Reply
  • You Rock!

    Posted by 3dtrue on 08/13/2005 03:24am

    Just wanted to say thanks Frank! Just what is was looking for! danke

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: December 11, 2014 @ 1:00 p.m. ET / 10:00 a.m. PT Market pressures to move more quickly and develop innovative applications are forcing organizations to rethink how they develop and release applications. The combination of public clouds and physical back-end infrastructures are a means to get applications out faster. However, these hybrid solutions complicate DevOps adoption, with application delivery pipelines that span across complex hybrid cloud and non-cloud environments. Check out this …

  • With the average hard drive now averaging one terabyte in size, the fallout from the explosion of user-created data has become an overwhelming volume of potential evidence that law-enforcement and corporate investigators spend countless hours examining. Join Us and SANS' Rob Lee for our 45-minute webinar, A Triage and Collection Strategy for Time-Sensitive Investigations, will demonstrate how to: Identify the folders and files that often contain key insights Reduce the time spent sifting through content by …

Most Popular Programming Stories

More for Developers

RSS Feeds