📄 bcgpmenupage.cpp
字号:
//*******************************************************************************
// COPYRIGHT NOTES
// ---------------
// This is a part of the BCGControlBar Library
// Copyright (C) 1998-2000 BCGSoft Ltd.
// All rights reserved.
//
// This source code can be used, distributed or modified
// only under terms and conditions
// of the accompanying license agreement.
//*******************************************************************************
// BCGPMenuPage.cpp : implementation file
//
#include "stdafx.h"
#ifndef BCG_NO_CUSTOMIZATION
#include "BCGGlobals.h"
#include "BCGPMenuPage.h"
#include "BCGPLocalResource.h"
#include "BCGPMenuBar.h"
#include "MenuHash.h"
#include "BCGPPopupMenu.h"
#include "BCGPContextMenuManager.h"
#include "BCGPMultiDocTemplate.h"
#include "BCGPToolbarCustomize.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CObList gAllToolbars;
CPoint CBCGPMenuPage::m_ptMenuLastPos = CPoint (100, 100);
/////////////////////////////////////////////////////////////////////////////
// CBCGPMenuPage property page
IMPLEMENT_DYNCREATE(CBCGPMenuPage, CPropertyPage)
CBCGPMenuPage::CBCGPMenuPage (CFrameWnd* pParentFrame, BOOL bAutoSet) :
CPropertyPage(CBCGPMenuPage::IDD),
m_pParentFrame (pParentFrame),
m_bAutoSet(bAutoSet)
{
//{{AFX_DATA_INIT(CBCGPMenuPage)
m_strMenuDescr = _T("");
m_strContextMenuName = _T("");
m_strMenuName = _T("");
m_iMenuAnimationType = (int) CBCGPPopupMenu::m_AnimationType;
m_bMenuShadows = CBCGPMenuBar::IsMenuShadows ();
//}}AFX_DATA_INIT
m_pMenuBar = NULL;
m_hmenuCurr = NULL;
m_hmenuSelected = NULL;
m_pContextMenu = NULL;
m_bIsDefaultMDIMenu = FALSE;
m_uiContextMenuResId = 0;
}
CBCGPMenuPage::~CBCGPMenuPage()
{
}
void CBCGPMenuPage::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CBCGPMenuPage)
DDX_Control(pDX, IDC_BCGBARRES_MENU_ANIMATION_LABEL, m_wndMenuAnimationsLabel);
DDX_Control(pDX, IDC_BCGBARRES_MENU_ANIMATION, m_wndMenuAnimations);
DDX_Control(pDX, IDC_BCGBARRES_MENU_SHADOWS, m_wndMenuShadows);
DDX_Control(pDX, IDC_BCGBARRES_CONTEXT_FRAME, m_wndContextFrame);
DDX_Control(pDX, IDC_BCGBARRES_CONTEXT_HINT, m_wndContextHint);
DDX_Control(pDX, IDC_BCGBARRES_RESET_MENU, m_wndResetMenuButton);
DDX_Control(pDX, IDC_BCGBARRES_CONTEXT_MENU_CAPTION, m_wndContextMenuCaption);
DDX_Control(pDX, IDC_BCGBARRES_CONTEXT_MENU_LIST, m_wndContextMenus);
DDX_Control(pDX, IDC_BCGBARRES_TEMPL_ICON, m_wndIcon);
DDX_Control(pDX, IDC_BCGBARRES_MENU_LIST, m_wndMenuesList);
DDX_Text(pDX, IDC_BCGBARRES_MENU_DESCRIPTION, m_strMenuDescr);
DDX_CBString(pDX, IDC_BCGBARRES_CONTEXT_MENU_LIST, m_strContextMenuName);
DDX_CBString(pDX, IDC_BCGBARRES_MENU_LIST, m_strMenuName);
DDX_CBIndex(pDX, IDC_BCGBARRES_MENU_ANIMATION, m_iMenuAnimationType);
DDX_Check(pDX, IDC_BCGBARRES_MENU_SHADOWS, m_bMenuShadows);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CBCGPMenuPage, CPropertyPage)
//{{AFX_MSG_MAP(CBCGPMenuPage)
ON_CBN_SELCHANGE(IDC_BCGBARRES_MENU_LIST, OnSelchangeMenuList)
ON_WM_DESTROY()
ON_CBN_SELCHANGE(IDC_BCGBARRES_CONTEXT_MENU_LIST, OnSelchangeContextMenuList)
ON_BN_CLICKED(IDC_BCGBARRES_RESET_MENU, OnResetMenu)
ON_BN_CLICKED(IDC_BCGBARRES_RESET_FRAME_MENU, OnBcgbarresResetFrameMenu)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBCGPMenuPage message handlers
BOOL CBCGPMenuPage::OnInitDialog()
{
{
CBCGPLocalResource locaRes;
CPropertyPage::OnInitDialog();
}
//----------------------------------------------------------
// Find application Menu Bar object (assume that only one):
//---------------------------------------------------------
for (POSITION pos = gAllToolbars.GetHeadPosition ();
m_pMenuBar == NULL && pos != NULL;)
{
CBCGPToolBar* pToolBar = (CBCGPToolBar*) gAllToolbars.GetNext (pos);
ASSERT (pToolBar != NULL);
if (CWnd::FromHandlePermanent (pToolBar->m_hWnd) != NULL)
{
ASSERT_VALID(pToolBar);
m_pMenuBar = DYNAMIC_DOWNCAST (CBCGPMenuBar, pToolBar);
}
}
if (m_pMenuBar != NULL)
{
m_pMenuBar->m_pMenuPage = this;
int iCurrMenu = -1;
//---------------------------
// Save MenuBar current menu:
//---------------------------
m_hmenuCurr = m_pMenuBar->GetMenu ();
m_pMenuBar->OnChangeHot (-1);
g_menuHash.SaveMenuBar (m_hmenuCurr, m_pMenuBar);
//-------------------------------------------------------------------
// Find all application document templates and fill menues combobox
// by document template data:
//------------------------------------------------------------------
CDocManager* pDocManager = AfxGetApp ()->m_pDocManager;
if (m_bAutoSet && pDocManager != NULL)
{
//---------------------------------------
// Walk all templates in the application:
//---------------------------------------
for (POSITION pos = pDocManager->GetFirstDocTemplatePosition (); pos != NULL;)
{
CBCGPMultiDocTemplate* pTemplate =
(CBCGPMultiDocTemplate*) pDocManager->GetNextDocTemplate (pos);
ASSERT_VALID (pTemplate);
ASSERT_KINDOF (CDocTemplate, pTemplate);
//-----------------------------------------------------
// We are interessing CMultiDocTemplate objects with
// the shared menu only....
//-----------------------------------------------------
if (!pTemplate->IsKindOf (RUNTIME_CLASS (CMultiDocTemplate)) ||
pTemplate->m_hMenuShared == NULL)
{
continue;
}
//----------------------------------------------------
// Maybe, the template with same ID is already exist?
//----------------------------------------------------
BOOL bIsAlreadyExist = FALSE;
for (int i = 0; !bIsAlreadyExist && i < m_wndMenuesList.GetCount (); i++)
{
CBCGPMultiDocTemplate* pListTemplate =
(CBCGPMultiDocTemplate*) m_wndMenuesList.GetItemData (i);
bIsAlreadyExist = pListTemplate != NULL &&
pListTemplate->GetResId () == pTemplate->GetResId ();
}
if (!bIsAlreadyExist)
{
CString strName;
pTemplate->GetDocString (strName, CDocTemplate::fileNewName);
int iIndex = m_wndMenuesList.AddString (strName);
m_wndMenuesList.SetItemData (iIndex, (DWORD) pTemplate);
if (pTemplate->m_hMenuShared == m_hmenuCurr)
{
iCurrMenu = iIndex;
}
}
}
}
//--------------------------
// Add a default frame menu:
//--------------------------
CString strName;
{
CBCGPLocalResource locaRes;
strName.LoadString (IDS_BCGBARRES_DEFUALT_MENU);
}
int iIndex = m_wndMenuesList.AddString (strName);
m_wndMenuesList.SetItemData (iIndex, (DWORD) NULL);
if (iCurrMenu == -1)
{
m_bIsDefaultMDIMenu = TRUE;
iCurrMenu = iIndex;
}
m_hmenuSelected = m_hmenuCurr;
m_wndMenuesList.SetCurSel (iCurrMenu);
UpdateData (FALSE);
OnSelchangeMenuList ();
}
else
{
//-------------------------------------------------
// No menubar found, disable menu selecting engine:
//-------------------------------------------------
m_wndMenuesList.EnableWindow (FALSE);
GetDlgItem(IDC_BCGBARRES_RESET_FRAME_MENU)->EnableWindow(FALSE);
CBCGPLocalResource locaRes;
m_strMenuDescr.LoadString (IDS_BCGBARRES_NO_MENUBAR);
UpdateData (FALSE);
}
//--------------------------
// Initialize context menus:
//--------------------------
{
CBCGPLocalResource locaRes;
CString strNoContextMenu;
strNoContextMenu.LoadString (IDS_BCGBARRES_NO_CONTEXT);
m_wndContextMenus.AddString (strNoContextMenu);
m_wndContextMenus.SetCurSel (0);
}
if (g_pContextMenuManager != NULL)
{
CStringList listOfNames;
g_pContextMenuManager->GetMenuNames (listOfNames);
for (pos = listOfNames.GetHeadPosition (); pos != NULL;)
{
CString strName = listOfNames.GetNext (pos);
m_wndContextMenus.AddString (strName);
}
m_wndContextMenuCaption.EnableWindow (m_wndContextMenus.GetCount () > 1);
m_wndContextMenus.EnableWindow (m_wndContextMenus.GetCount () > 1);
}
else
{
//-------------------------------
// Hide all context menus fields:
//-------------------------------
m_wndContextMenuCaption.ShowWindow (SW_HIDE);
m_wndContextMenus.ShowWindow (SW_HIDE);
m_wndContextHint.ShowWindow (SW_HIDE);
m_wndContextFrame.ShowWindow (SW_HIDE);
m_wndResetMenuButton.ShowWindow (SW_HIDE);
}
CBCGPToolbarCustomize* pWndParent = DYNAMIC_DOWNCAST (CBCGPToolbarCustomize, GetParent ());
ASSERT (pWndParent != NULL);
if ((pWndParent->GetFlags () & BCGCUSTOMIZE_MENU_SHADOWS) == 0)
{
m_wndMenuShadows.ShowWindow (SW_HIDE);
}
if ((pWndParent->GetFlags () & BCGCUSTOMIZE_MENU_ANIMATIONS) == 0)
{
m_wndMenuAnimationsLabel.ShowWindow (SW_HIDE);
m_wndMenuAnimations.ShowWindow (SW_HIDE);
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
//********************************************************************************************
void CBCGPMenuPage::OnSelchangeMenuList()
{
UpdateData ();
if (m_pMenuBar == NULL)
{
ASSERT (FALSE);
return;
}
if (m_hmenuSelected != NULL)
{
m_pMenuBar->OnChangeHot (-1);
g_menuHash.SaveMenuBar (m_hmenuSelected, m_pMenuBar);
}
int iIndex = m_wndMenuesList.GetCurSel ();
if (iIndex == CB_ERR)
{
m_strMenuDescr = _T("");
m_wndIcon.SetIcon (NULL);
UpdateData (FALSE);
m_hmenuSelected = NULL;
return;
}
HICON hicon = NULL;
HMENU hmenu = NULL;
CBCGPMultiDocTemplate* pTemplate =
(CBCGPMultiDocTemplate*) m_wndMenuesList.GetItemData (iIndex);
if (pTemplate != NULL)
{
ASSERT_VALID (pTemplate);
pTemplate->GetDocString (m_strMenuDescr, CDocTemplate::regFileTypeName);
hicon = AfxGetApp ()->LoadIcon (pTemplate->GetResId ());
if (hicon == NULL)
{
hicon = ::LoadIcon(NULL, IDI_APPLICATION);
}
hmenu = pTemplate->m_hMenuShared;
}
else
{
{
CBCGPLocalResource locaRes;
m_strMenuDescr.LoadString (IDS_BCGBARRES_DEFAULT_MENU_DESCR);
}
CWnd* pWndMain = AfxGetMainWnd ();
if (pWndMain != NULL)
{
hicon = (HICON) GetClassLong (*pWndMain, GCL_HICON);
}
hmenu = m_pMenuBar->GetDefaultMenu ();
}
ASSERT (hmenu != NULL);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -