I am using CMFCToolbar in a CMFCDesktopAlertDialog which is contained inside a CMFCDesktopAlertWnd. Initially I create the window and insert 3 buttons. Then on some action, I want to change those buttons to 2 or 3 different buttons. I tried using CMFCToolbar::RemoveAllButtons() & then InsertButton(). However, it did not work. When RemoveAllButtons() is called, all button get removed however new buttons are not inserted.
This was resolved after calling AdjustLayout after inserting the buttons. The code is as below.
void MyClass::ReplaceButtons()
{
m_m_myMFCToolbar.RemoveAllButtons();
if(condition1)
{
m_myMFCToolbar.InsertButton( CMFCToolBarButton(ID_BUTTON1, 0, _T("MyText1"), FALSE, TRUE ) );
m_myMFCToolbar.InsertButton( CMFCToolBarButton(ID_BUTTON2, 1, _T("MyText2"), FALSE, TRUE ) );
}
else
{
m_myMFCToolbar.InsertButton( CMFCToolBarButton(ID_BUTTON3, 2, _T("MyText3"), FALSE, TRUE ) );
m_myMFCToolbar.InsertButton( CMFCToolBarButton(ID_BUTTON4, 3, _T("MyText4"), FALSE, TRUE) );
}
m_myMFCToolbar.AdjustLayout(); // This was added to resolve the issue
CSize sizeToolBar = m_myMFCToolbar.CalcFixedLayout( FALSE, TRUE );
m_myMFCToolbar.SetWindowPos(NULL, 0, 0, sizeToolBar.cx, sizeToolBar.cy, SWP_NOACTIVATE | SWP_NOZORDER );
}