15,979
社区成员
发帖
与我相关
我的任务
分享
// CKofMFCRibbonQuickAccessToolBar
class CKofMFCRibbonQuickAccessToolBar : public CMFCRibbonQuickAccessToolBar
{
friend class CKofMFCRibbonBar;
};
//////////////////////////////////////////////////////////////////////////
// CKofMFCRibbonBar
class CKofMFCRibbonBar : public CMFCRibbonBar
{
DECLARE_DYNAMIC(CKofMFCRibbonBar)
public:
CKofMFCRibbonBar(BOOL bReplaceFrameCaption = TRUE);
virtual ~CKofMFCRibbonBar();
void CKofMFCRibbonBar::hideRibbon()
{
ShowPane(FALSE, FALSE, TRUE);
ForceRecalcLayout();
}
void CKofMFCRibbonBar::showRibbon()
{
ShowPane(TRUE, TRUE, TRUE);
ForceRecalcLayout();
}
DECLARE_MESSAGE_MAP()
};
void CKofMFCRibbonBar::hideRibbon()
{
RemoveAllCategories();
ForceRecalcLayout();
}
void CKofMFCRibbonBar::showRibbon()
{
CMFCRibbonCategory* m_pCategoryMain = AddCategory(_T("Main"), 0, 0);
m_pCategoryMain->AddPanel(_T("App Set"));
ForceRecalcLayout();
}
换成这代码亲测是可以实现楼主的功能的。代码意思是隐藏的时候将所有的Ribbon控件删除,那ribbon就隐藏了,显示的时候就动态添加Ribbon控件,动态添加Ribbon控件楼主应该会吧。
AddCategory
AddPanel
如果动态不会,可以私信我
// 框架窗口大小左移,然后再右移。
LRESULT CMainFrame::OnShowRibbonBar(WPARAM wParam, LPARAM lParam)
{
ShowPane(&m_wndRibbonBar, (BOOL)wParam, FALSE, FALSE);
CRect rect;
GetWindowRect(&rect);
rect.left += 1;
MoveWindow(rect);
rect.left -= 1;
SetWindowPos(NULL, rect.left, rect.top, rect.Width(), rect.Height(), SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
return 0;
}
LRESULT CMainFrame::OnShowRibbonBar(WPARAM wParam, LPARAM lParam)
{
ShowPane(&m_wndRibbonBar, (BOOL)wParam, FALSE, FALSE);
SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_FRAMECHANGED);
}