📄 bcgpmenupage.cpp
字号:
m_pMenuBar->CreateFromMenu (hmenu);
m_wndIcon.SetIcon (hicon);
m_hmenuSelected = hmenu;
UpdateData (FALSE);
}
//***********************************************************************************************
void CBCGPMenuPage::OnDestroy()
{
UpdateData ();
CBCGPPopupMenu::m_AnimationType =
(CBCGPPopupMenu::ANIMATION_TYPE) m_iMenuAnimationType;
if (m_pMenuBar != NULL)
{
m_pMenuBar->m_pMenuPage = NULL;
//------------------------------
// Save the selected menu state:
//------------------------------
if (m_hmenuSelected != NULL)
{
m_pMenuBar->OnChangeHot (-1); // To close and save all popups
g_menuHash.SaveMenuBar (m_hmenuSelected, m_pMenuBar);
}
//--------------------------
// Restore the current menu:
//--------------------------
if (m_hmenuCurr != NULL)
{
m_pMenuBar->CreateFromMenu (m_hmenuCurr);
}
}
//------------------------------------
// Release the context menu resources:
//------------------------------------
if (m_pContextMenu != NULL)
{
SaveMenu ();
m_pContextMenu->SendMessage (WM_CLOSE);
}
//--------------------------
// Update shdows appearance:
//--------------------------
CBCGPMenuBar::EnableMenuShadows (m_bMenuShadows);
CPropertyPage::OnDestroy();
}
//************************************************************************************************
void CBCGPMenuPage::OnSelchangeContextMenuList()
{
m_wndResetMenuButton.EnableWindow (FALSE);
if (g_pContextMenuManager == NULL)
{
return;
}
m_uiContextMenuResId = 0;
//----------------------------------------
// First, save and close the current menu:
//----------------------------------------
if (m_pContextMenu != NULL)
{
SaveMenu ();
CBCGPPopupMenu* pMenu = m_pContextMenu;
m_pContextMenu = NULL;
pMenu->SendMessage (WM_CLOSE);
}
if (m_wndContextMenus.GetCurSel () <= 0)
{
//--------------------------------------
// No is menu selected, nothing to do...
//--------------------------------------
return;
}
UpdateData ();
HMENU hMenu = g_pContextMenuManager->GetMenuByName (
m_strContextMenuName, &m_uiContextMenuResId);
if (hMenu == NULL)
{
MessageBeep ((UINT) -1);
return;
}
HMENU hmenuPopup = ::GetSubMenu (hMenu, 0);
if (hmenuPopup == NULL)
{
ASSERT (FALSE);
return;
}
m_pContextMenu = new CBCGPPopupMenu (this, m_strContextMenuName);
ASSERT (m_pContextMenu != NULL);
if (!globalData.bIsWindowsNT4)
{
m_pContextMenu->SetAutoDestroy (FALSE);
}
if (!m_pContextMenu->Create (GetTopLevelFrame (),
m_ptMenuLastPos.x, m_ptMenuLastPos.y,
hmenuPopup))
{
AfxMessageBox (_T("Can't create context menu!"));
}
else
{
m_wndResetMenuButton.EnableWindow ();
}
}
//************************************************************************************************
void CBCGPMenuPage::CloseContextMenu (CBCGPPopupMenu* pMenu)
{
if (m_pContextMenu == NULL)
{
return;
}
ASSERT(m_pContextMenu == pMenu);
SaveMenu ();
if (m_pContextMenu != NULL)
{
m_pContextMenu = NULL;
m_wndContextMenus.SetCurSel (0);
m_wndResetMenuButton.EnableWindow (FALSE);
}
m_uiContextMenuResId = 0;
}
//***********************************************************************************************
void CBCGPMenuPage::SaveMenu ()
{
if (m_pContextMenu == NULL)
{
return;
}
//-----------------------------
// Save current menu position:
//-----------------------------
CRect rectMenu;
m_pContextMenu->GetWindowRect (&rectMenu);
m_ptMenuLastPos = rectMenu.TopLeft ();
//-------------------
// Save menu context:
//-------------------
g_menuHash.SaveMenuBar (m_pContextMenu->m_hMenu, m_pContextMenu->GetMenuBar ());
}
//***********************************************************************************************
void CBCGPMenuPage::OnResetMenu()
{
if (g_pContextMenuManager == NULL)
{
return;
}
ASSERT (m_pContextMenu != NULL);
{
CBCGPLocalResource locaRes;
CString strPrompt;
strPrompt.Format (IDS_BCGBARRES_RESET_MENU_FMT, m_strContextMenuName);
if (MessageBox (strPrompt, NULL, MB_YESNO | MB_ICONQUESTION) != IDYES)
{
return;
}
}
HMENU hMenu = g_pContextMenuManager->GetMenuByName (m_strContextMenuName,
&m_uiContextMenuResId);
if (hMenu == NULL)
{
MessageBeep ((UINT) -1);
return;
}
m_pContextMenu->GetMenuBar ()->ImportFromMenu (::GetSubMenu (hMenu, 0));
//---------------------------------------------
// Send notification to application main frame:
//---------------------------------------------
if (m_pParentFrame != NULL)
{
m_pParentFrame->SendMessage (BCGM_RESETCONTEXTMENU,
(WPARAM) m_uiContextMenuResId, (LPARAM) m_pContextMenu);
}
OnSelchangeContextMenuList ();
m_pContextMenu->RecalcLayout ();
m_pContextMenu->GetMenuBar ()->Invalidate ();
}
//*****************************************************************************************
void CBCGPMenuPage::OnBcgbarresResetFrameMenu()
{
UpdateData ();
if (m_pMenuBar == NULL)
{
ASSERT (FALSE);
return;
}
int iIndex = m_wndMenuesList.GetCurSel ();
if (iIndex == CB_ERR)
{
ASSERT (FALSE);
return;
}
{
CBCGPLocalResource locaRes;
CString strPrompt;
strPrompt.Format (IDS_BCGBARRES_RESET_MENU_FMT, m_strMenuName);
if (MessageBox (strPrompt, NULL, MB_YESNO | MB_ICONQUESTION) != IDYES)
{
return;
}
}
HMENU hOldMenu = NULL;
CBCGPMultiDocTemplate* pTemplate =
(CBCGPMultiDocTemplate*) m_wndMenuesList.GetItemData (iIndex);
if (pTemplate != NULL) // Document's menu
{
ASSERT_VALID (pTemplate);
HINSTANCE hInst = AfxFindResourceHandle (
MAKEINTRESOURCE (pTemplate->GetResId ()), RT_MENU);
BOOL bIsCurrent = (pTemplate->m_hMenuShared == m_hmenuCurr);
hOldMenu = pTemplate->m_hMenuShared;
pTemplate->m_hMenuShared = ::LoadMenu (hInst, MAKEINTRESOURCE (pTemplate->GetResId ()));
m_pMenuBar->CreateFromMenu (pTemplate->m_hMenuShared, FALSE);
CBCGPMenuBar::UpdateMDIChildrenMenus (pTemplate);
if (m_pParentFrame != NULL)
{
if (m_pParentFrame->SendMessage (BCGM_RESETMENU, pTemplate->GetResId ()))
{
m_pMenuBar->AdjustLayout();
};
}
g_menuHash.SaveMenuBar (pTemplate->m_hMenuShared, m_pMenuBar);
if (bIsCurrent)
{
ASSERT (!m_bIsDefaultMDIMenu);
m_hmenuCurr = pTemplate->m_hMenuShared;
}
}
else // Frame's default menu
{
UINT uiDefMenuResId = m_pMenuBar->GetDefaultMenuResId ();
if (uiDefMenuResId != 0)
{
HINSTANCE hInst = AfxFindResourceHandle (
MAKEINTRESOURCE (uiDefMenuResId), RT_MENU);
hOldMenu = m_pMenuBar->m_hDefaultMenu;
HMENU hDefaultMenu = ::LoadMenu (hInst, MAKEINTRESOURCE (uiDefMenuResId));
m_pMenuBar->OnDefaultMenuLoaded (hDefaultMenu);
m_pMenuBar->CreateFromMenu (hDefaultMenu, TRUE);
if (m_pParentFrame != NULL)
{
if (m_pParentFrame->SendMessage (BCGM_RESETMENU, uiDefMenuResId))
{
m_pMenuBar->AdjustLayout();
}
m_pParentFrame->m_hMenuDefault = hDefaultMenu;
}
g_menuHash.SaveMenuBar (hDefaultMenu, m_pMenuBar);
if (m_bIsDefaultMDIMenu)
{
m_hmenuCurr = hDefaultMenu;
}
}
}
if (m_pParentFrame != NULL)
{
m_pParentFrame->OnUpdateFrameMenu (m_hmenuCurr);
}
if (hOldMenu != NULL)
{
ASSERT (::IsMenu (hOldMenu));
g_menuHash.RemoveMenu (hOldMenu);
::DestroyMenu (hOldMenu);
}
m_pMenuBar->Invalidate ();
m_pMenuBar->UpdateWindow ();
}
//**************************************************************************************
BOOL CBCGPMenuPage::SelectMenu (CDocTemplate* pTemplate, BOOL bSaveCurr)
{
for (int i = 0; i < m_wndMenuesList.GetCount (); i++)
{
if ((CDocTemplate*) m_wndMenuesList.GetItemData (i) == pTemplate)
{
if (!bSaveCurr)
{
m_hmenuSelected = NULL; // To prevent saving
}
if (m_pMenuBar != NULL)
{
m_hmenuCurr = m_pMenuBar->GetMenu ();
}
m_wndMenuesList.SetCurSel (i);
OnSelchangeMenuList ();
return TRUE;
}
}
return FALSE;
}
#endif // BCG_NO_CUSTOMIZATION
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -