按钮在运行时未在 CMFCToolbar 中被替换
Buttons not getting replaced in CMFCToolbar at runtime
我在 CMFCDesktopAlertDialog 中使用 CMFCToolbar,它包含在 CMFCDesktopAlertWnd 中。最初我创建 window 并插入 3 个按钮。然后在执行某些操作时,我想将这些按钮更改为 2 或 3 个不同的按钮。我尝试使用 CMFCToolbar::RemoveAllButtons() & 然后使用 InsertButton()。但是,它没有用。调用 RemoveAllButtons() 时,所有按钮都会被删除,但不会插入新按钮。
插入按钮后调用 AdjustLayout 解决了这个问题。
代码如下
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 );
}
我在 CMFCDesktopAlertDialog 中使用 CMFCToolbar,它包含在 CMFCDesktopAlertWnd 中。最初我创建 window 并插入 3 个按钮。然后在执行某些操作时,我想将这些按钮更改为 2 或 3 个不同的按钮。我尝试使用 CMFCToolbar::RemoveAllButtons() & 然后使用 InsertButton()。但是,它没有用。调用 RemoveAllButtons() 时,所有按钮都会被删除,但不会插入新按钮。
插入按钮后调用 AdjustLayout 解决了这个问题。 代码如下
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 );
}