📄 bcgpframewnd.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.
//*******************************************************************************
// BCGPFrameWnd.cpp : implementation file
//
#include "stdafx.h"
#include "afxpriv.h"
#include "BCGPFrameWnd.h"
#include "BCGPMenuBar.h"
#include "BCGPPopupMenu.h"
#include "BCGPMiniFrameWnd.h"
#include "BCGPUserToolsManager.h"
#include "BCGPInit.h"
#include "BCGPPrintPreviewView.h"
#ifdef _BCGP_USE_OLEIMPL_
#include "oleimpl2.h"
#endif
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CBCGPFrameWnd
IMPLEMENT_DYNCREATE(CBCGPFrameWnd, CFrameWnd)
#pragma warning (disable : 4355)
CBCGPFrameWnd::CBCGPFrameWnd() :
m_Impl (this),
m_bContextHelp (FALSE),
m_bWasMaximized (FALSE),
m_bIsMinimized (FALSE)
{
}
#pragma warning (default : 4355)
CBCGPFrameWnd::~CBCGPFrameWnd()
{
}
BEGIN_MESSAGE_MAP(CBCGPFrameWnd, CFrameWnd)
//{{AFX_MSG_MAP(CBCGPFrameWnd)
ON_WM_MENUCHAR()
ON_WM_ACTIVATE()
ON_WM_CLOSE()
ON_WM_DESTROY()
ON_WM_SIZING()
ON_WM_SIZE()
ON_WM_GETMINMAXINFO()
//}}AFX_MSG_MAP
ON_WM_ACTIVATEAPP()
ON_MESSAGE(WM_IDLEUPDATECMDUI, OnIdleUpdateCmdUI)
ON_REGISTERED_MESSAGE(BCGM_CREATETOOLBAR, OnToolbarCreateNew)
ON_REGISTERED_MESSAGE(BCGM_DELETETOOLBAR, OnToolbarDelete)
ON_UPDATE_COMMAND_UI(ID_VIEW_STATUS_BAR, OnUpdateControlBarMenu)
ON_COMMAND_EX(ID_VIEW_STATUS_BAR, OnBarCheck)
ON_UPDATE_COMMAND_UI(ID_VIEW_TOOLBAR, OnUpdateControlBarMenu)
ON_COMMAND_EX(ID_VIEW_TOOLBAR, OnBarCheck)
ON_UPDATE_COMMAND_UI(ID_VIEW_REBAR, OnUpdateControlBarMenu)
ON_COMMAND_EX(ID_VIEW_REBAR, OnBarCheck)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBCGPFrameWnd message handlers
LRESULT CBCGPFrameWnd::OnMenuChar(UINT nChar, UINT nFlags, CMenu* pMenu)
{
if (m_Impl.OnMenuChar (nChar))
{
return MAKELPARAM (MNC_EXECUTE, -1);
}
return CFrameWnd::OnMenuChar(nChar, nFlags, pMenu);
}
//*******************************************************************************************
afx_msg LRESULT CBCGPFrameWnd::OnSetMenu (WPARAM wp, LPARAM lp)
{
OnSetMenu ((HMENU) wp);
return DefWindowProc (WM_MDISETMENU, NULL, lp);
}
//*******************************************************************************************
BOOL CBCGPFrameWnd::OnSetMenu (HMENU hmenu)
{
if (m_Impl.m_pMenuBar != NULL)
{
m_Impl.m_pMenuBar->CreateFromMenu
(hmenu == NULL ? m_Impl.m_hDefaultMenu : hmenu);
return TRUE;
}
return FALSE;
}
//*******************************************************************************************
BOOL CBCGPFrameWnd::PreTranslateMessage(MSG* pMsg)
{
BOOL bProcessAccel = TRUE;
switch (pMsg->message)
{
case WM_SYSKEYDOWN:
case WM_CONTEXTMENU:
if (CBCGPPopupMenu::m_pActivePopupMenu != NULL &&
::IsWindow (CBCGPPopupMenu::m_pActivePopupMenu->m_hWnd) &&
pMsg->wParam == VK_MENU)
{
CBCGPPopupMenu::m_pActivePopupMenu->SendMessage (WM_CLOSE);
return TRUE;
}
else if (m_Impl.ProcessKeyboard ((int) pMsg->wParam))
{
return TRUE;
}
break;
case WM_SYSKEYUP:
if (m_Impl.m_pMenuBar != NULL && (VK_MENU == pMsg->wParam))
{
if (m_Impl.m_pMenuBar == GetFocus ())
{
SetFocus ();
}
else
{
m_Impl.m_pMenuBar->SetFocus ();
}
return TRUE;
}
if (CBCGPPopupMenu::m_pActivePopupMenu != NULL &&
::IsWindow (CBCGPPopupMenu::m_pActivePopupMenu->m_hWnd))
{
return TRUE; // To prevent system menu opening
}
break;
case WM_KEYDOWN:
//-----------------------------------------
// Pass keyboard action to the active menu:
//-----------------------------------------
if (!CBCGPFrameImpl::IsHelpKey (pMsg) &&
m_Impl.ProcessKeyboard ((int) pMsg->wParam, &bProcessAccel))
{
return TRUE;
}
if (pMsg->wParam == VK_ESCAPE)
{
if (IsFullScreen())
{
m_Impl.m_FullScreenMgr.RestoreState (this);
}
}
if (!bProcessAccel)
{
return FALSE;
}
break;
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_RBUTTONUP:
case WM_MBUTTONDOWN:
case WM_MBUTTONUP:
{
CPoint pt (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam));
CWnd* pWnd = CWnd::FromHandle (pMsg->hwnd);
if (pWnd != NULL)
{
pWnd->ClientToScreen (&pt);
}
if (m_Impl.ProcessMouseClick (pMsg->message, pt, pMsg->hwnd))
{
return TRUE;
}
if (!::IsWindow (pMsg->hwnd))
{
return TRUE;
}
if (pMsg->message == WM_RBUTTONUP &&
!CBCGPToolBar::IsCustomizeMode ())
{
//---------------------------------------
// Activate the control bar context menu:
//---------------------------------------
CDockBar* pBar = DYNAMIC_DOWNCAST(CDockBar, pWnd);
if (pBar != NULL)
{
CPoint pt;
pt.x = BCG_GET_X_LPARAM(pMsg->lParam);
pt.y = BCG_GET_Y_LPARAM(pMsg->lParam);
pBar->ClientToScreen(&pt);
SendMessage (BCGM_TOOLBARMENU,
(WPARAM) GetSafeHwnd (),
MAKELPARAM (pt.x, pt.y));
}
}
}
break;
case WM_NCLBUTTONDOWN:
case WM_NCLBUTTONUP:
case WM_NCRBUTTONDOWN:
case WM_NCRBUTTONUP:
case WM_NCMBUTTONDOWN:
case WM_NCMBUTTONUP:
if (m_Impl.ProcessMouseClick (pMsg->message,
CPoint (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam)),
pMsg->hwnd))
{
return TRUE;
}
break;
case WM_MOUSEMOVE:
{
CPoint pt (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam));
CWnd* pWnd = CWnd::FromHandle (pMsg->hwnd);
if (pWnd != NULL)
{
pWnd->ClientToScreen (&pt);
}
if (m_Impl.ProcessMouseMove (pt))
{
return TRUE;
}
}
}
return CFrameWnd::PreTranslateMessage(pMsg);
}
//*******************************************************************************************
BOOL CBCGPFrameWnd::ShowPopupMenu (CBCGPPopupMenu* pMenuPopup)
{
if (!m_Impl.OnShowPopupMenu (pMenuPopup, this))
{
return FALSE;
}
if (pMenuPopup != NULL && pMenuPopup->m_bShown)
{
return TRUE;
}
return OnShowPopupMenu (pMenuPopup);
}
//*******************************************************************************************
void CBCGPFrameWnd::OnClosePopupMenu (CBCGPPopupMenu* pMenuPopup)
{
if (CBCGPPopupMenu::m_pActivePopupMenu == pMenuPopup)
{
CBCGPPopupMenu::m_pActivePopupMenu = NULL;
}
}
//*******************************************************************************************
BOOL CBCGPFrameWnd::OnCommand(WPARAM wParam, LPARAM lParam)
{
if (HIWORD (wParam) == 1)
{
UINT uiCmd = LOWORD (wParam);
CBCGPToolBar::AddCommandUsage (uiCmd);
//---------------------------
// Simmulate ESC keystroke...
//---------------------------
if (m_Impl.ProcessKeyboard (VK_ESCAPE))
{
return TRUE;
}
if (g_pUserToolsManager != NULL &&
g_pUserToolsManager->InvokeTool (uiCmd))
{
return TRUE;
}
}
if (!CBCGPToolBar::IsCustomizeMode ())
{
return CFrameWnd::OnCommand(wParam, lParam);
}
return FALSE;
}
//******************************************************************
BOOL CBCGPFrameWnd::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle, CWnd* pParentWnd, CCreateContext* pContext)
{
if (!BCGPInit ())
{
return FALSE;
}
m_Impl.m_nIDDefaultResource = nIDResource;
m_Impl.LoadLargeIconsState ();
if (!CFrameWnd::LoadFrame(nIDResource, dwDefaultStyle, pParentWnd, pContext))
{
return FALSE;
}
m_Impl.OnLoadFrame ();
return TRUE;
}
//***************************************************************************************
void CBCGPFrameWnd::OnClose()
{
m_Impl.OnCloseFrame();
CFrameWnd::OnClose();
}
//***************************************************************************************
BOOL CBCGPFrameWnd::PreCreateWindow(CREATESTRUCT& cs)
{
m_dockManager.Create (this);
m_Impl.SetDockManager (&m_dockManager);
m_Impl.RestorePosition(cs);
return CFrameWnd::PreCreateWindow(cs);
}
//***************************************************************************************
void CBCGPFrameWnd::WinHelp(DWORD dwData, UINT nCmd)
{
if (dwData > 0 || !m_bContextHelp)
{
CFrameWnd::WinHelp(dwData, nCmd);
}
else
{
OnContextHelp ();
}
}
//***************************************************************************************
void CBCGPFrameWnd::OnContextHelp ()
{
m_bContextHelp = TRUE;
if (!m_bHelpMode && CanEnterHelpMode())
{
CBCGPToolBar::SetHelpMode ();
}
CFrameWnd::OnContextHelp ();
if (!m_bHelpMode)
{
CBCGPToolBar::SetHelpMode (FALSE);
}
m_bContextHelp = FALSE;
}
//*******************************************************************************************
LRESULT CBCGPFrameWnd::OnToolbarCreateNew(WPARAM,LPARAM lp)
{
ASSERT (lp != NULL);
return (LRESULT) m_Impl.CreateNewToolBar ((LPCTSTR) lp);
}
//***************************************************************************************
LRESULT CBCGPFrameWnd::OnToolbarDelete(WPARAM,LPARAM lp)
{
CBCGPToolBar* pToolbar = (CBCGPToolBar*) lp;
ASSERT_VALID (pToolbar);
return (LRESULT) m_Impl.DeleteToolBar (pToolbar);
}
//***************************************************************************************
BOOL CBCGPFrameWnd::DockControlBarLeftOf (CBCGPControlBar* pBar, CBCGPControlBar* pLeftOf)
{
return m_dockManager.DockControlBarLeftOf (pBar, pLeftOf);
}
//************************************************************************************
void CBCGPFrameWnd::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CFrameWnd::OnActivate(nState, pWndOther, bMinimized);
switch (nState)
{
case WA_CLICKACTIVE:
UpdateWindow ();
break;
case WA_INACTIVE:
if (!CBCGPToolBar::IsCustomizeMode ())
{
m_Impl.DeactivateMenu ();
}
break;
}
}
//****************************************************************************
#if _MSC_VER >= 1300
void CBCGPFrameWnd::OnActivateApp(BOOL bActive, DWORD /*dwThreadID*/)
#else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -